4

MSDN によると、regenerateExpiredSessionId="true"は、期限切れのセッション ID がクライアントによって指定されたときにセッション ID が再発行されることを指定していると理解しています。ただし、これは説明どおりに機能していないようです。

次のように構成されたアプリケーションがあるとします。

<sessionState 
     cookieless="AutoDetect" 
     regenerateExpiredSessionId="true" />

また、別の場所には、期限切れのセッション ID が埋め込まれているアプリケーションのページへのリンクがあります。

<p><a href="http://localhost/SessionStateTest/(S(3gxng155isp0ocvhveoklnqe))/Default.aspx">Here is a link!</a></p>

Cookie が有効になっていないブラウザでそのリンクをクリックした場合、セッション ID は再発行されません。URL から期限切れの ID をリサイクルし、この古い ID で新しいセッションを作成しています。

もちろん、Cookie を使用しない複数のブラウザが同時にリンクをクリックすると、すべてのブラウザが期限切れの同じセッション ID を共有します。これは明らかにセキュリティ上の問題です。

regenerateExpiredSessionId="true"は、ユーザーが誤って同じセッション状態を共有するのを防ぐためのものではありませんか? もしそうなら、この場合、フレームワークが期待どおりに新しいセッション ID を生成しないのはなぜですか?

4

1 に答える 1

1

セッションが実際に期限切れになっていますか?

フォーム認証を使用している場合、そのチケットはセッションとは異なる時間に期限切れになる可能性があります。(スライド式の有効期限をミックスに入れると、さらに混乱します)

cookieless が有効になっていることを確認するには、セッションが期限切れになったと思われるときに URL を確認します...再度ログインしたときに URL チケットの 2 番目の部分 "F(xydUI....)" が変更され、"S(dysXy. ..)" は、セッションが更新されたばかりで、完全に期限切れになっていないことを知っているままです。

お役に立てれば

于 2009-01-17T00:12:12.643 に答える