asp.net sessionID 在回发时更改?

Posted

技术标签:

【中文标题】asp.net sessionID 在回发时更改?【英文标题】:asp.net sessionID changing on postbacks? 【发布时间】:2010-10-10 11:44:42 【问题描述】:

我正在编写一个将对象存储在缓存中的 asp.net 应用程序。当页面第一次加载时,它会检查对象的缓存,如果存在,它将使用该对象。如果对象不存在,它将重新构建它并将其存储在缓存中。由于多个用户可以同时使用这个应用程序,我试图将对象存储在缓存中,缓存键是 SessionID。好吧,我注意到当页面回发时,sessionID 发生了变化,所以我需要使用不同的唯一键。有什么建议?我正在考虑使用登录人的用户 ID,但这也不是唯一的,因为您可以多次使用相同的 ID 登录。

【问题讨论】:

【参考方案1】:

回发时会话 ID 不应更改。 asp.net 使用它来做类似的事情。 你能提供更多关于这个场景的信息吗?什么类型的数据,为什么/何时尝试“缓存”

更新 1: 关于每次回帖都会更改,您是否禁用了 cookie?您使用的是哪个版本的 asp.net?

【讨论】:

【参考方案2】:

我想我刚刚从 MSDN 找到了我的答案(这是对 2.0、3.5 的更改):

"当使用基于 cookie 的会话状态时,ASP.NET 在使用 Session 对象之前不会为会话数据分配存储空间。因此,在访问会话对象之前,会为每个页面请求生成一个新的会话 ID。如果您的应用程序需要整个会话的静态会话 ID,您可以在应用程序的 Global.asax 文件中实现 Session_Start 方法并将数据存储在 Session 对象中以修复会话 ID,或者您可以在您的另一部分中使用代码应用程序在 Session 对象中显式存储数据。”

http://msdn.microsoft.com/en-us/library/system.web.sessionstate.httpsessionstate.sessionid.aspx

【讨论】:

以上是关于asp.net sessionID 在回发时更改?的主要内容,如果未能解决你的问题,请参考以下文章

如何避免在回发时从 asp.net 重复输入?

如何在回发 ASP.Net Core 后保持选项卡处于活动状态

jQuery填充的Gridview在回发时丢失数据

在回发时,如何向验证摘要添加错误消息?

防止在回发时重新加载 iframe

Gridview 中 TemplateField 中的复选框在回发时丢失