3

これを1時間理解しようとしていて、私は困惑しています。従業員が登録できるシンプルなサイト。通常、雇用主はすべての従業員が登録ページにアクセスするために使用する全社的なu / pを持っていますが、クライアントは従業員に自動ログインへのリンクを提供して登録する方法も望んでいました。

非常に単純です-URL.emid(暗号化された雇用者ID)とURL.h(暗号化された雇用者IDに基づくチェックとして5文字のハッシュ)を検索するページ「r.cfm」を作成しました。完全なURLは次のようになります。

https://www.domain.com/r.cfm?emid=22EBCA&h=F5DEA

r.cfmは、正しいURL変数が存在することを確認し、emidを復号化し、チェック値を比較し、すべてが正しい場合は、いくつかのセッション変数をそのように設定します。

<cflock scope="session" type="exclusive" timeout="10">
 <cfset SESSION.LOGGEDIN = TRUE/>
 <cfset SESSION.LOGIN.EMPLOYEE.COID = DecryptString(url.emid)/>
</cflock>

CFHEADER 302とCFHEADERの場所を使用して、次のページに送信すると思います。ここがおかしくなるところです。次のページで、セッションのダンプを電子メールで送信するためのテストコードを設定します。

MS Wordで直接クリックすると、2番目のページ(cfheaderリダイレクトからのページ--employeeRegister.cfm)が表示され、セッションの1つではなく2つの電子メールダンプが表示されます。最初のものはログインしたものをtrueとして表示しますが、2番目のものは別のjsessionidでfalseとして表示します。

まったく同じリンクを取得してブラウザに貼り付けると、期待どおりに機能します。セッションダンプが記載された1通の電子メールで、session.loggedがtrueになっていることが示されます。

employeeRegister.cfmには、ページの再読み込みを開始するものはありません。実際には、次のページまで、varのsession.loggedをチェックしません。employeeRegister.cfmは、単に利用規約であり、セッション変数が読み取られてチェックされる次のページに移動するための送信ボタンです。これは文字通り、テキスト付きのdivであり、次にaccept/decline付きのフォームタグです。

4

1 に答える 1

6

これは、Office 製品が最初に (Web オーサリングをテストするために) ブラウザーとして機能しようとするためです。制御をブラウザーにすぐに渡すのではありません。Office が Cookie を共有しないため、ブラウザーが URL を制御できるようになるまでに、有効なセッションは存在しません。有効なセッション Cookie がないと、その後のリダイレクトまたは問題のサイトのナビゲーション中にログアウトされてしまいます。

これらの MS KB 記事は、問題の解決に役立ちます。

http://support.microsoft.com/kb/899927 <-ほとんど

http://support.microsoft.com/kb/218153 <- Office リンクの詳細

于 2012-10-31T17:31:57.973 に答える