据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?”