据我了解,根据 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?