我正在编写一个将对象存储在缓存中的 asp.net 应用程序。当页面第一次加载时,它会检查对象的缓存,如果存在,它将使用该对象。如果对象不存在,它将重新构建它并将其存储在缓存中。由于多个用户可以同时使用这个应用程序,我试图将对象存储在缓存中,缓存键是 SessionID。好吧,我注意到当页面回发时,sessionID 发生了变化,所以我需要使用不同的唯一键。有什么建议么?我正在考虑使用登录人的用户 ID,但这也不是唯一的,因为您可以多次使用相同的 ID 登录。
问问题
3866 次
2 回答
10
我想我刚刚从 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
于 2009-02-28T02:53:39.433 回答
0
回发时会话 ID 不应更改。asp.net 使用它来做类似的事情。你能提供更多关于这个场景的信息吗?什么类型的数据,为什么/何时尝试“缓存”
更新 1:关于每次回帖时的更改,您是否禁用了 cookie?您使用的是哪个版本的 asp.net?
于 2009-02-28T02:40:46.670 回答