我已检查服务器(Win Server 2003)应用程序事件日志中是否存在未显示的以下问题http://support.microsoft.com/kb/308097。对于随机用户来说,会话似乎随机丢失
这是一个单一的服务器设置,没有网络农场,也没有负载平衡
即使我在上面指出的问题没有出现在日志中,还是值得增加stateNetworkTimeout属性吗?目前的配置只是
<sessionState mode="StateServer" cookieless="false" stateConnectionString="tcpip=localhost:42424" timeout="60"/>
更新
使用FormsAuth和Timeout设置为60
IIS6设置
答案 0 :(得分:4)
我意识到这是一个较老的问题,但我最近遇到过类似的问题。就我而言,额外的日志记录显示,在一系列.aspx页面中,Session变量似乎随机丢失。
在遇到这个blog post后,我查看了我的代码,果然,我的所有Response.Redirect语句都是默认语句(例如Response.Redirect(target)或true)(例如Response.Redirect(target,真的))。明智地审查我的重定向并将Session变量设置后的那些设置为false(例如Response.Redirect(target,false)) - 问题[貌似]解决了!我会注意到你需要在执行此操作时要小心,因为在传递false时重定向之后页面的其余部分仍将执行。在许多情况下,我需要在重定向之后添加一个return语句,以防止运行在重定向后我不打算运行的代码。
我只在生产和负载下遇到过丢失的会话变量(从不在开发或测试中)。关于为什么这解决了我的问题的理论是Response.Redirect(默认/ true)强制结束执行线程 - 如果线程仍在忙于序列化会话对象并将它们放回状态服务器时(线程)被中断,他们(会话对象)可能会丢失。
答案 1 :(得分:0)
您还需要在表单身份验证部分设置超时(默认为30分钟)
http://weblogs.asp.net/scottgu/archive/2005/11/08/430011.aspx