ASP.NETを使用してセッションの新しいIDを生成することは可能ですか?
最初のセッション変数を設定する直前に誰かが私のウェブサイトにログインしたときに変更したいです。
SessionIdManager クラスを使用してこれを行うことができます:
SessionIDManager manager = new SessionIDManager();
string newID = manager.CreateSessionID(Context);
bool redirected = false;
bool isAdded = false;
manager.SaveSessionID(Context, newID, out redirected, out isAdded);
[コードサンプルは Anas Ghanemの記事]
使用できます
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で構成可能な別のパラメーターです。プロパティにアクセスして、構成からそれを読み取る必要があります。
((System.Web.Configuration.SessionStateSection)ConfigurationManager.GetSection("system.web/sessionState")).CookieName
セッションID Cookieはアプリケーションを対象としないため、同じサーバーに2つのアプリケーションがインストールされている場合は、異なるCookie名を使用することが望ましい場合が多いため、これは一般的に考えられるよりも必要です。
これはセキュリティに関連すると思いますか? Session.Clear()
またはSession.Abandon()
は機能しますか? これは良いSOリンク これらのメソッドに関連しています。
そうしないと、ASP.NETセッションCookieが既にユーザーのブラウザーにあるため、困難です。セッションが本当に変更されたことに自信がないかもしれません。