我的应用程序一直存在丢失会话的问题,而且我几乎肯定它与应用程序池的回收太频繁了。
我想尝试一个进程外解决方案并配置了SQLServer sessionState,但是当我回收工作进程时,我的会话仍然被吹走了。这是我的web.config
<sessionState cookieless="false" stateConnectionString="tcpip=localhost:42424" mode="SQLServer" sqlConnectionString="Data Source=(local;User ID=user;Password=password" timeout="180" />
我已经运行了相应的sql脚本来设置数据库,我可以看到会话已创建并存储在数据库中,但如果我更改了web.config或手动回收了工作进程,我的会话就会丢失。我做错了什么?
旁注,我收到了与StateServer模式完全相同的行为。我似乎正确配置它,我可以看到当我登录时状态服务内存占用量变大....我试图将非序列化对象推入并收到错误....但是当我回收应用程序池或更改web.config我失去了会话....
我还尝试设置Memcached会话提供程序(我真正想要使用的),可在此处找到:http://memcachedproviders.codeplex.com/releases/view/10468
它也在做同样的事情!我可以看到在数据库中创建的会话,当我尝试与非序列化对象进行交互时,我将收到与序列化有关的错误....但是当应用程序池被回收时我会丢失会话。
启用一些日志记录后,我在事件查看器中看到了这一点:
事件代码:1003事件消息:应用程序编译正在开始
无人??我真的需要离开进程会话状态工作....帮助!!
答案 0 :(得分:0)
检查机器密钥的设置(假设IIS 7.5)。如果您的Web服务器设置为自动生成计算机密钥,则当您的应用程序回收并且导致您丢失会话时,它可能会生成新密钥。
请在此处查看此链接,以便轻松为您的Web应用程序生成唯一的计算机密钥。您应该能够在Web服务器或Web应用程序级别生成它们。
http://blogs.msdn.com/b/amb/archive/2012/07/31/easiest-way-to-generate-machinekey.aspx
此外,FWIW,SQL Server会话状态管理器非常与数据库通话。它可以工作,但是您将使用该Session提供程序为每个请求访问数据库。