ユーザーがログアウトボタンをクリックしたときにセッション(Session ["Name"])を破棄するにはどうすればよいですか?
MSDNのASP.NET APIリファレンスを調べていますが、あまり情報がないようです。かなり限られているようです。しかし、ASP.NETクラスなどの他のページは見つかりません。
私が試してみました:
Session.Abandon();
とSession.Contents.Remove("Name");
はどちらも機能しません。 (Google検索のフォーラムでこれらを見つけました)
Abandon
メソッドは動作するはずです( [〜#〜] msdn [〜#〜] ):
Session.Abandon();
セッションから特定のアイテムを削除する場合は、( [〜#〜] msdn [〜#〜] )を使用します。
Session.Remove("YourItem");
編集:値をクリアするだけの場合は、次の操作を実行できます。
Session["YourItem"] = null;
すべてのキーをクリアする場合:
Session.Clear();
これらのどれもあなたのために働いていない場合、何か怪しいことが起こっています。値を割り当てている場所を確認し、値をクリアした後に値が再割り当てされていないことを確認します。
簡単なチェックを行う:
Session["YourKey"] = "Test"; // creates the key
Session.Remove("YourKey"); // removes the key
bool gone = (Session["YourKey"] == null); // tests that the remove worked
また、セッションID Cookie値をクリアするようにクライアントブラウザに指示することもお勧めします。
Session.Clear();
Session.Abandon();
Response.Cookies["ASP.NET_SessionId"].Value = string.Empty;
Response.Cookies["ASP.NET_SessionId"].Expires = DateTime.Now.AddMonths(-10);
これにより、セッションは放棄済みとしてマークされますが、その時点ではセッションは実際に放棄されず、最初に要求を完了する必要があります。
私がテストしたものから:
Session.Abandon(); // Does nothing
Session.Clear(); // Removes the data contained in the session
Example:
001: Session["test"] = "test";
002: Session.Abandon();
003: Print(Session["test"]); // Outputs: "test"
Session.Abandonは、session-objectのブールフラグのみをtrueに設定します。呼び出し元のWebサーバーはそれに反応する場合もしない場合もありますが、ASPによる[〜#〜] no [〜#〜]即時アクションがあります。 (自分自身を.net-Reflectorで確認しました)
実際、ブラウザの戻るボタンを1回押すことで、古いセッションでの作業を続行でき、通常どおりWebサイトをブラウズし続けることができます。
したがって、これを結論付けるには、Session.Clear()を使用してフラストレーションを軽減します。
注:ASP.net開発サーバーでこの動作をテストしました。実際のIISは異なる動作をする可能性があります。
Session.Abandon();
も機能しませんでした。
動作させるために書かなければならなかった方法は、このようなものでした。あなたにも役立つかもしれません。
HttpContext.Current.Session.Abandon();
Session.Abandon()
これはデータを破壊します。
これは必ずしもユーザーからセッショントークンを本当に削除するわけではありません。使用するのが公正なゲームであると見なされるため、後で同じセッショントークンが取得され、同じIDを持つ新しいセッションとして作成される場合があります。
次のようなセッションを強制終了します。
Session.Abandon()
ただし、セッションを空にするだけの場合は、次を使用します。
Session.Clear()
Session["YourItem"] = "";
.netのかみそりのWebページに最適です。
Session.Abandon()
使用すべきものです。事は舞台裏にあります。asp.netはセッションを破棄しますが、次のページリクエストですぐに新しいセッションをユーザーに提供します。そのため、abandonを呼び出した直後にセッションが終了したかどうかを確認する場合は、機能しなかったように見えます。