ASP.NETを使用してセッションの新しいIDを生成することは可能ですか?
最初のセッション変数を設定する直前に、誰かが私のWebサイトにログインしたときに変更したいと思います。
これは、 SessionIdManagerクラスを使用して実行できます。
SessionIDManager manager = new SessionIDManager();
string newID = manager.CreateSessionID(Context);
bool redirected = false;
bool isAdded = false;
manager.SaveSessionID(Context, newID, out redirected, out isAdded);
[コードサンプルはAnasGhanemの記事からのものです]
あなたが使用することができます
SessionIDManager.CreateSessionID Method :
24文字の文字列にエンコードされたランダムに生成された数値である一意のセッション識別子を返します。
コード
SessionIDManager Manager = new SessionIDManager();
string NewID = Manager.CreateSessionID(Context);
string OldID = Context.Session.SessionID;
bool redirected = false;
bool IsAdded = false;
Manager.SaveSessionID(Context, NewID,out redirected, out IsAdded);
ここでは、hsiの詳細を確認できます。プログラムでセッションIDを変更します。
はい、セッションの新しいIDを生成することは可能です。以下はその一例です
SessionState.SessionIDManager Manager = new SessionState.SessionIDManager();
string NewID = Manager.CreateSessionID(Context);
string OldID = Context.Session.SessionID;
bool IsAdded = false;
Manager.SaveSessionID(Context, NewID, false, IsAdded);
Response.Write("Old SessionId Is : " + OldID);
if (IsAdded) {
Response.Write("<br/> New Session ID Is : " + NewID);
}
else {
Response.Write("<br/> Session Id did not saved : ");
}
ASP.Netセッション管理インフラストラクチャは、要求の処理中にセッションIDを変更するためのサポートされている方法を公開していません。サポートされているコードを書くことがあなたにとって重要である場合、受け入れられた答えで知っておくべきいくつかのことがあります。
CreateSessionID
マークされています。SaveSessionID
HttpContext
は最初のセッションIDに関連付けられたままになるため、セッション状態バッグに入れたものはすべて失われたように見えます。IDを変更すると、セッションでできることは何もないので、この方法でIDを変更するのは無意味です。残念ながら、ラウンドトリップなしでこれを行うためのサポートされている方法はありません。ログインフォームを生成するときに、セッション状態のCookieを消去する必要があります。ユーザーがフォームを送信し直すと、フレームワークはを呼び出してSessionIDManager
新しいフォームを生成します。セッションCookieを正しくワイプすることは、ほとんどのコードサンプルが示すよりも少し複雑です。Cookie名は、web.configで構成可能なもう1つのパラメーターです。プロパティにアクセスして、構成から読み取る必要があります。
((System.Web.Configuration.SessionStateSection)ConfigurationManager.GetSection("system.web/sessionState")).CookieName
セッションIDCookieはアプリケーションにスコープされていないため、同じサーバーに2つのアプリケーションがインストールされている場合は、異なるCookie名を使用することが望ましい場合が多いため、これは想像以上に一般的に必要になります。
これはセキュリティ関連だと思いますか?Session.Clear()
またははあなたSession.Abandon()
のために働きますか? これは、これらのメソッドに関連する優れたSOリンクです。
それ以外の場合、ASP.NETセッションCookieは既にユーザーのブラウザーにあるため、困難です。セッションが本当に変更されたという自信がないかもしれません。