web-dev-qa-db-ja.com

新しいセッションIDを生成する方法

ASP.NETを使用してセッションの新しいIDを生成することは可能ですか?

最初のセッション変数を設定する直前に誰かが私のウェブサイトにログインしたときに変更したいです。

21
Luke

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の記事]

25
stuartd

使用できます

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の変更

4
Pranay Rana

はい、セッションの新しい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 : "); 
} 
3
user1102001

ASP.Netセッション管理インフラストラクチャは、リクエストの処理中にセッションIDを変更するためのサポートされた方法を公開しません。サポートされているコードを書くことがあなたにとって重要である場合、受け入れられた答えで注意すべきいくつかのことがあります。

  • CreateSessionIDSaveSessionIDは両方とも マーク 「このメソッドはアプリケーションコードから呼び出されることを意図していません」。
  • SessionIDプロバイダーはプラグ可能なタイプです(例: カスタムSessionIDManagerの実装 )。したがって、少なくとも正しいタイプをインスタンス化する必要があります。
  • HttpContextにアタッチされたセッション状態は初期セッションIDに関連付けられたままなので、セッション状態バッグに入れたものはすべて失われたように見えます。 IDを変更するとセッションでできることは何もないので、このようにIDを変更するのは無意味です。

残念ながら、往復なしでこれを行うサポートされた方法はありません。ログインフォームを生成するときに、セッション状態Cookieを消去する必要があります。ユーザーがフォームを送信すると、フレームワークはSessionIDManagerを呼び出して新しいフォームを生成します。セッションCookieを正しく消去することは、ほとんどのコードサンプルが示すよりも少し複雑です。 Cookie名は、web.configで構成可能な別のパラメーターです。プロパティにアクセスして、構成からそれを読み取る必要があります。

((System.Web.Configuration.SessionStateSection)ConfigurationManager.GetSection("system.web/sessionState")).CookieName

セッションID Cookieはアプリケーションを対象としないため、同じサーバーに2つのアプリケーションがインストールされている場合は、異なるCookie名を使用することが望ましい場合が多いため、これは一般的に考えられるよりも必要です。

3
bmm6o

これはセキュリティに関連すると思いますか? Session.Clear()またはSession.Abandon()は機能しますか? これは良いSOリンク これらのメソッドに関連しています。

そうしないと、ASP.NETセッションCookieが既にユーザーのブラウザーにあるため、困難です。セッションが本当に変更されたことに自信がないかもしれません。

2
Davin Tryon