15

SessionIDに基づくロギングコードを書いています...

ただし、ログアウトして(Session.Abandonを呼び出して)もう一度ログインしても、SessionIDは同じです。基本的に、私のPCのすべてのブラウザには、独自のセッションIDが「接続」されており、何らかの理由で変更されません:/

何が起こっているのかアイデアはありますか?

私のセッション構成は次のようになります。

    <sessionState
       mode="InProc"
       timeout="1" />

ありがとう、Paweł

4

5 に答える 5

14

session.abandon のプロセスを説明するこの記事を確認してください。

http://support.microsoft.com/kb/899918

上記のリンクから取得 -

「セッションを中止しても、セッション ID Cookie はユーザーのブラウザから削除されません。したがって、セッションが中止されるとすぐに、同じアプリケーションへの新しいリクエストは同じセッション ID を使用しますが、新しいセッション状態インスタンス」

于 2010-09-15T09:37:45.197 に答える
5

ここに記載されているように、これは設計によるデフォルトの動作です。

放棄または期限切れのセッションのセッション識別子は、デフォルトでリサイクルされます。つまり、期限切れまたは放棄されたセッションのセッション ID を含む要求が行われると、同じセッション ID を使用して新しいセッションが開始されます。これを無効にするには、sessionState 構成要素の regenerateExpiredSessionId 属性を true に設定します。

上記のように、この設定を無効にすることができます。

編集: regenerateExpiredSessionId 属性を true に設定すると、Cookie のないセッションでのみ機能します。この問題を解決するには、SessionIDManager クラスを継承するカスタム クラスを実装することを検討してください。それに関する情報は、ここここで入手できます。

于 2010-09-15T09:34:15.580 に答える
2

これが私のために働いたものです、唯一の注意点は、このコードをログインルーチンから分離する必要があるということです。

Response.Cookies("ASP.NET_SessionId").Expires = DateTime.Now.AddYears(-30)

ページの読み込みが完了するまで有効になりません。私のアプリケーションには、次のような新しいIDを強制する単純なセキュリティルーチンがあります。

if session("UserID") = "" then 
    Response.Cookies("ASP.NET_SessionId").Expires = DateTime.Now.AddYears(-30)
    Response.Redirect("login.aspx")
end if
于 2011-10-31T14:27:20.110 に答える
0

セッション Cookie を明示的にクリアすることができます。構成によって Cookie 名を制御し、クリア中に同じ名前を使用する必要があります。

編集:セッションが放棄されたときにセッション cookie をクリアすると、ASP.NET は次の要求のために新しいセッションとセッション ID を作成するように強制されます。ところで、セッション Cookie をクリアするもう 1 つの方法は、SessionIDManager.RemoveSessionIDメソッドを使用することです。

于 2010-09-15T09:37:31.507 に答える