11

我的理解来自

http://msdn.microsoft.com/en-us/library/system.web.configuration.sessionstatesection.regenerateexpiredsessionid.aspx

regenerateExpiredSessionId="false "的含义是,如果会话 id 过期,如果客户端请求具有相同 id 的 url,它将不会被重新使用。

regenerateExpiredSessionId ="true"的意义在于,如果会话 id 过期,如果客户端请求具有相同 id 的 url,它将被重新使用(回收)。

但是当我阅读帖子时

regenerateExpiredSessionId 未按预期工作

似乎我误解了 regenerateExpiredSessionId="true" 的含义。

有人可以解释哪个是正确的吗?

4

2 回答 2

14

默认情况下,无 cookie 会话中使用的会话 ID 值会被回收。也就是说,如果使用已过期的会话 ID 发出请求,则使用随请求提供的 SessionID 值启动新会话。当多个浏览器使用包含无 cookie SessionID 值的链接时,这可能会导致无意共享会话。(如果链接通过搜索引擎、电子邮件或其他程序传递,则可能会发生这种情况。)您可以通过将应用程序配置为不回收会话标识符来减少共享会话数据的机会。为此,请将 sessionState 配置元素的 regenerateExpiredSessionId 属性设置为 true。当使用过期的会话 ID 发出无 cookie 会话请求时,这会生成一个新的会话 ID。

参考:http: //msdn.microsoft.com/en-us/library/ms178581.aspx

于 2011-10-07T04:46:13.187 回答
2

我相信当人们讨论这个属性时,“重新发布”这个词是有问题的。我看到一些帖子将其解释为“生成一个新的会话 ID 并将其发布给客户端”,而其他帖子将其解释为“一个过期的会话 ID 被分配给一个新会话并发布给客户端”。我相信 msdn 文档的意思是后者,并且您引用的堆栈溢出帖子错误地将其解释为前者。

于 2010-03-05T16:06:06.907 回答