22

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

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

4

5 に答える 5

25

これは、 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の記事からのものです]

于 2012-08-16T13:00:19.070 に答える
5

あなたが使用することができます

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を変更します。

于 2012-08-16T12:59:12.567 に答える
4

はい、セッションの新しい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 : "); 
} 
于 2012-08-16T13:06:35.217 に答える
3

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

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

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

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

セッションIDCookieはアプリケーションにスコープされていないため、同じサーバーに2つのアプリケーションがインストールされている場合は、異なるCookie名を使用することが望ましい場合が多いため、これは想像以上に一般的に必要になります。

于 2017-07-28T23:22:57.610 に答える
2

これはセキュリティ関連だと思いますか?Session.Clear()またははあなたSession.Abandon()のために働きますか? これは、これらのメソッドに関連する優れたSOリンクです。

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

于 2012-08-16T13:00:46.607 に答える