在ASP.NET中丢失会话ID

时间:2009-06-14 14:45:21

标签: asp.net session

我遇到了Asp.NET会话ID的问题。只要存在代码隐藏更改并将dll移动到肝服务器/如果对web.config文件进行任何修改,则无法访问现有会话。会话ID将重置。

如果我们使用stateserver,那么我们可以保留会话值。但在某些共享托管环境中无法实现。

是否有其他方法可以保持会话值而不管更改?

5 个答案:

答案 0 :(得分:3)

还有基于SQL Server的会话。您可能会也可能无法使用共享主机进行设置。但如果可以的话,它的效果非常好。它具有非常持久的优点。即使服务器发生故障,也会保留会话。这几乎是我使用会话的唯一方式。

这是一篇解释如何设置的文章: http://faqfront.com/document/sql-server-session-state

幸运的是,您的共享托管服务提供商可以为您提供帮助,因为它可以使所有客户受益。

答案 1 :(得分:2)

另一种选择是尝试使网站不使用会话。我可能错了,但我认为这就是SO的作用。我不是特别了解SO案例,但您可以随时从cookie中读/写。这将在代码更改后持续存在。

这实际上是我正准备尝试在我的项目中实现以消除会话超时。我心里很新鲜,所以我想我会把它扔出去。

答案 2 :(得分:2)

每当您更改web.config时,都会导致IIS应用程序池被回收。当应用程序池回收时,会话中存储的任何对象都将丢失。最小化这一点的最佳方法(不移动到proc [所以State Server,Sql Server或分布式缓存,如memcache或Velocity])只是限制你发布更新的频率。把它们放在“凌晨1点”(负载低时)。否则超出proc(Sql Server在共享环境中可能是最好的......但是在perf上祝你好运)可能是你最好的选择。

答案 3 :(得分:0)

除了基于Sql Server的会话之外,您还可以在服务进程中存储会话。这被称为进程外模式。

您可以在此处找到会话状态的介绍: http://msdn.microsoft.com/en-us/library/ms972429.aspx

答案 4 :(得分:0)

在我的测试中,session.sessionid没有被重置。但是,存储的会话变量正在丢失。

我建议使用asp.net会话ID可访问的会话数据表(在db中)。因此,应用程序重新开发不会影响您的会话表。因为sessionid没有改变,你仍然可以访问确切的会话变量。