2009-08-12 26 views
0

已解决问题! ASP.NET会话立即过期。在我的web.config我有这个会话设置:
ASP.NET会话很快到期了吗?

<sessionState mode="InProc" timeout="10000" /> 

AFAIK超时属性的值是minutes,不能大于525600分钟(1年)。我不明白我在这里做错了什么。为什么会话过期。这是服务器内存问题吗?我不这么认为,服务器非常流行,并且只有一个站点没有太多的工作。想法?
编辑:
的cookiless属性设置为true,同时注意到在URL中的会话ID,我可以看到会话ID CHANGING后。我认为这意味着会议即将到期。 IIS设置是正确的AFAIK(启用会话状态复选框被选中,时间值为20)。一张图片胜过100个字:

alt text http://img148.imageshack.us/img148/5053/sessionstate.jpg

+0

需要更多的信息。你为什么说会议过期了?如果你在一个页面上设置一个会话变量并尝试在另一个页面上显示它,那么它是否为空?或者使用像fiddler(fiddlertool.com)这样的东西,你看到会话cookie变化了吗? – gjutras 2009-08-12 12:48:50

+0

不,我的一个队友正在设置一个包含登录用户信息的会话变量。 – Galilyou 2009-08-12 13:22:42

回答

0

原来是我们的团队成员之一的失误,他被设定为INPROC虽然该网站与负载均衡分配4台物理机的会话。我不确定这是否是问题,但是当我改变它以将会话存储在SQL服务器中时,它工作正常!将深入探讨这个问题并报告我可能得到的任何进一步信息。谢谢你们所有的人!

+0

这是因为默认情况下会话保存在提供请求的框中。如果您的负载均衡器后面有4台机器,则有人可能会向A提出请求,此时会为该用户提供会话数据。然而,如果下一个请求是由于负载均衡器而从B框提供的,则框B将无法知道框A上的会话信息。这就是为什么切换到sql server模式解决了您的问题 - 因为所有4台机器都是从相同的位置共享会话。 – 2013-11-12 17:39:18

1

也许你的浏览器不正确地存储cookie。尝试将会话设置为cookieless模式,然后重试。

<sessionState mode="InProc" timeout="10000" cookieless="true" /> 
+0

我不认为这是一个浏览器问题,我尝试了FF和Chrome! – Galilyou 2009-08-12 12:48:39

+0

也许这是IIS cookies处理问题。它尝试'无cookie'的方法不会伤害。 – RaYell 2009-08-12 15:38:10

0

您需要确保会话已启用IIS以及web.config中。

而且,这是值得把一些日志上的应用程序重新启动。您可能还有其他问题导致整个应用程序重置。

+0

hmm ..不知道有关IIS设置..将检查! – Galilyou 2009-08-12 12:49:13

+0

检查IIS设置,问题已相应更新! – Galilyou 2009-08-13 05:17:51

0

我过这种情况与页面一次。事实证明,我正在做一个Session.Abandon()的地方,我没有意识到在执行序列中调用了它(它与登录和我使用成员资格提供程序的方式有关)。作为一个调试技巧,我会建议在每个Session.Abandon()上放置一个断点,并确保在你不期望它时调用它。

+0

好吧,我在同一台机器上创建了一个空白的新应用程序,点击时只有一个按钮会为会话保存一个值。直到过期的会话。 – Galilyou 2009-08-12 12:52:12

0

这发生在我身上了几次与主要元凶一直。

有人更新的Web应用程序使它重新开始一个文件,这样当有人决定没有意识到这将导致所有的会话中断更新在web.config事情通常发生。

导致它的另一件事是IIS中的一个设置,它定义了会话最后的持续时间,如果进入虚拟目录/网站的属性并单击配置,选项选项卡上会话超时持续时间检查这是启用并设置为一个足够高的值。