asp.net 2.0のセッション変数に関する問題
-
08-07-2019 - |
質問
ユーザーがログインしたときにセッション変数を保持します。 ユーザーがbtnLogoutをクリックすると、すべてのセッションがクリアされ、ユーザーをログアウトする必要があります!!!
セッションはクリアされますが、ログアウトした直後にIEで[戻る]ボタンをクリックすると、まだログインしています。つまり、ユーザーがまだログインしている画面に戻ります。
ログアウト時の私のコード
protected void btnLogout_Click
{
Session.Clear();
Session.Abandon();
Session.RemoveAll();
Response.Redirect("Home.aspx");
}
これはなぜですか、どうすればこれを防ぐことができますか?
編集: ユーザーがWeb Browzerの[戻る]ボタンを押すことを無効にするコードにオプションがありますか?
解決
これをマスターのPage_Initに入れることができます:
Response.Cache.SetNoServerCaching();
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
Response.Cache.SetExpires(new DateTime(1900, 01, 01, 00, 00, 00, 00));
これは、たとえば、ほとんどの銀行のウェブサイトで行われていることで、戻るボタンを効果的に使用できません。
他のヒント
これは本当に問題ですか?はい、彼らは前のページがキャッシュされているので見ることができましたが、このコンテキスト内で他の正当なリクエストを行おうとするとすぐに、セッション変数がなくなって失敗します。
この問題をコーディングする非常に具体的な理由がない限り、実際には存在しない問題を解決することになります。
ページ上で次のコードを使用して、コードビハインド、JavaScript、またはHTMLのいずれかからページをキャッシュしないようにブラウザに指示する方法はいくつかあります
<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
セッションビハインドが実際に存在することを確認するために、コードビハインドのコードにpage_loadイベントを追加することも良い習慣でした。
ブラウザはページのキャッシュを保持しているため、単にクリックするだけでは、まだログインしているかどうかを確認するためのサーバーへの要求は行われません。キャッシュも保護するためにHTTPSを使用する必要があります。