イタリック体のすべてが元の投稿です。以下の編集はイタリック体ではありません
ASP.NET 4.0 を使用して C# で記述しています。SQLルックアップを介してユーザー資格情報を認証しています。有効な場合は、ユーザー名をセッション変数に保存してから、ユーザーをメインページにリダイレクトしています。ものすごく単純。
if (!db.isValidLogin(userName, passWord))
{
//invalid login, show it!
//just some code to tell the user invalid credentials
}
else
{
//show login successful!
//update some items on the screen
Session["username"] = userName.ToUpper();
Response.Redirect("/");
}
現時点では内部開発であるため、これはまだ SSL ではありません。Chrome バージョン「25.0.1364.172 m」を使用すると、適切にリダイレクトされ、「ログイン」されます。私の画面は、ユーザー名を表示し、認証が許可する機能へのアクセスを許可することで、それを表しています。(32 ビット) IE 9 バージョン "9.0.8112.16421" を同じサーバー側コードと手順で使用すると、リダイレクトを実行すると、セッション変数 "username" がなくなります。実際、セッションのアイテム数は 0 です。リダイレクトの前にセッション変数が設定され、それは正しいです。Windows Server 2008 R2 64 ビット ボックスと Windows 7 64 ビット ボックスで同じ結果が得られました。IIS と SQL の両方をホストする単一のサーバーを使用しています。セッションサーバーを使用していません。トレースしてしまった… コードはリダイレクトまで正確に実行されています。資格情報を受け取り、検証するためにストアド プロシージャを実行します...リダイレクトする前にセッション変数を設定します(セッションと変数を確認でき、値は正しいです).そしてリダイレクトします...そして、述べたように、Chromeでは正確に動作します必要に応じて... IEでは、リダイレクト時にセッションが失われます。私もこれを試しましたが成功しませんでした: Response.Redirect("/", false); したがって、クライアントに Cookie を設定することで IE が行っていることが、ブラウザとサーバー セッションの不一致を引き起こしていると確信しています。私はresponse.redirectをやるべきではありませんか??? また、response.redirect を実行した場合、セッションがリセットされないようにするにはどうすればよいですか? 繰り返しますが、Chrome を使用している場合はこのようなことはありません。イライラする...助けてくれてありがとう!資格情報を受け取り、検証するためにストアド プロシージャを実行します...リダイレクトする前にセッション変数を設定します(セッションと変数を確認でき、値は正しいです).そしてリダイレクトします...そして、述べたように、Chromeでは正確に動作します必要に応じて... IEでは、リダイレクト時にセッションが失われます。私もこれを試しましたが成功しませんでした: Response.Redirect("/", false); したがって、クライアントに Cookie を設定することで IE が行っていることが、ブラウザとサーバー セッションの不一致を引き起こしていると確信しています。私はresponse.redirectをやるべきではありませんか??? また、response.redirect を実行した場合、セッションがリセットされないようにするにはどうすればよいですか? 繰り返しますが、Chrome を使用している場合はこのようなことはありません。イライラする...助けてくれてありがとう!資格情報を受け取り、検証するためにストアド プロシージャを実行します...リダイレクトする前にセッション変数を設定します(セッションと変数を確認でき、値は正しいです).そしてリダイレクトします...そして、述べたように、Chromeでは正確に動作します必要に応じて... IEでは、リダイレクト時にセッションが失われます。私もこれを試しましたが成功しませんでした: Response.Redirect("/", false); したがって、クライアントに Cookie を設定することで IE が行っていることが、ブラウザとサーバー セッションの不一致を引き起こしていると確信しています。私はresponse.redirectをやるべきではありませんか??? また、response.redirect を実行した場合、セッションがリセットされないようにするにはどうすればよいですか? 繰り返しますが、Chrome を使用している場合はこのようなことはありません。イライラする...助けてくれてありがとう!リダイレクトする前にセッション変数を設定します(セッションと変数を確認でき、値は正しいです)..そしてリダイレクトします...そして、述べたように、Chromeでは希望どおりに正確に機能します... IEではセッションが失われますリダイレクト。私もこれを試しましたが成功しませんでした: Response.Redirect("/", false); したがって、クライアントに Cookie を設定することで IE が行っていることが、ブラウザとサーバー セッションの不一致を引き起こしていると確信しています。私はresponse.redirectをやるべきではありませんか??? また、response.redirect を実行した場合、セッションがリセットされないようにするにはどうすればよいですか? 繰り返しますが、Chrome を使用している場合はこのようなことはありません。イライラする...助けてくれてありがとう!リダイレクトする前にセッション変数を設定します(セッションと変数を確認でき、値は正しいです)..そしてリダイレクトします...そして、述べたように、Chromeでは希望どおりに正確に機能します... IEではセッションが失われますリダイレクト。私もこれを試しましたが成功しませんでした: Response.Redirect("/", false); したがって、クライアントに Cookie を設定することで IE が行っていることで、ブラウザとサーバー セッションの間で不一致が発生していると確信しています。私はresponse.redirectをやるべきではありませんか??? また、response.redirect を実行した場合、セッションがリセットされないようにするにはどうすればよいですか? 繰り返しますが、Chrome を使用している場合はこのようなことはありません。イライラする...助けてくれてありがとう!述べたように、Chrome では希望どおりに動作します... IE ではリダイレクト時にセッションが失われます。私もこれを試しましたが成功しませんでした: Response.Redirect("/", false); したがって、クライアントに Cookie を設定することで IE が行っていることで、ブラウザとサーバー セッションの間で不一致が発生していると確信しています。私はresponse.redirectをやるべきではありませんか??? また、response.redirect を実行した場合、セッションがリセットされないようにするにはどうすればよいですか? 繰り返しますが、Chrome を使用している場合はこのようなことはありません。イライラする...助けてくれてありがとう!述べたように、Chrome では希望どおりに動作します... IE ではリダイレクト時にセッションが失われます。私もこれを試しましたが成功しませんでした: Response.Redirect("/", false); したがって、クライアントに Cookie を設定することで IE が行っていることで、ブラウザとサーバー セッションの間で不一致が発生していると確信しています。私はresponse.redirectをやるべきではありませんか??? また、response.redirect を実行した場合、セッションがリセットされないようにするにはどうすればよいですか? 繰り返しますが、Chrome を使用している場合はこのようなことはありません。イライラする...助けてくれてありがとう!これにより、ブラウザとサーバー セッションの間で不一致が発生しています。私はresponse.redirectをやるべきではありませんか??? また、response.redirect を実行した場合、セッションがリセットされないようにするにはどうすればよいですか? 繰り返しますが、Chrome を使用している場合はこのようなことはありません。イライラする...助けてくれてありがとう!これにより、ブラウザとサーバー セッションの間で不一致が発生しています。私はresponse.redirectをやるべきではありませんか??? また、response.redirect を実行した場合、セッションがリセットされないようにするにはどうすればよいですか? 繰り返しますが、Chrome を使用している場合はこのようなことはありません。イライラする...助けてくれてありがとう!
新しい情報
回答ごとにIEキャッシングをオフにしようとした後...セッションIDをブラウザーに出力して、それが何であるかを確認することにしました。
動作は、ログインとリダイレクトよりも直接的です...
IE では、F5 キーを押してブラウザーを更新するだけで、サーバー上に新しいセッションが作成されます。更新するたびに、新しいセッション ID を受け取ります。
これをChromeでテストすると、session.abandonを呼び出してセッションをタイムアウトにするか、ブラウザを閉じて再起動しない限り、新しいセッションIDを取得できません。
ユーザーがログアウトをクリックしたときにのみ session.abandon を呼び出していましたが、誤って放棄しないように (念のため) そのコードをコメントアウトしました。
実際のページ更新の間のどこかで、IE はサーバーに新しいセッションを提示しています... ARGH。
例: Chrome: ログイン前: myjuzrmccerk1t4eakcliq14 ログイン後: myjuzrmccerk1t4eakcliq14
IE: ログイン前: unyebuc2ikac12xnhpssy0em ログイン後: unyebuc2ikac12xnhpssy0em
F5 または Ctrl-R で更新: 1 つ: ptjt42fjwzgdreyyyo3cmvrs 2 つ: s1hd5aatl5yexeuc125aqhst 3 つ: kbpflurcdcxubux3scmdm4k5
更新 2
セッションに「State Server」を使用するようにサイトを変更し、適切なサービスを開始しました。動作に変更はありません。
答え
私の担当者が少ないので.. .これでさらに 3 時間は自分の質問に答えることができません..
私は修正を見つけました...試行錯誤の結果。
「cookieless = true」を追加するまで、セッションステートのInProcとStateServerはどちらも同じ結果でした
<sessionState mode="StateServer" cookieless="true" />
これにより、Chrome と IE (問題があった場所) の両方でセッション状態が一貫し、ページの更新間でセッション ID が変更されなくなりました。なぜこれが起こるのかを判断できませんでしたが、それでも修正されました.. マイクとアンチサイエンスに感謝します!