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

您确定您的会话实际上即将到期吗?

如果您使用 Forms 身份验证,则其票证的到期时间可能与会话不同。(当您将滑动到期加入混合时会变得更加混乱)

要检查 cookieless 是否启用,只需在您认为会话已过期时查看 url……如果 url 票证的第二部分“F(xydUI ....)”在您再次登录时发生变化,但“S(dysXy. ..)”保持不变,您知道您的会话刚刚更新并且尚未完全过期。

希望这可以帮助

于 2009-01-17T00:12:12.643 回答