会话永远不会在使用SQLServer sessionState模式的MOSS 2007托管的asp .net中过期

时间:2012-10-10 15:07:40

标签: asp.net .net firefox sharepoint-2007 session-cookies

我有一个使用asp.net身份验证和SQL Server会话状态模式运行的应用程序。出于某种原因,会话似乎永远不会使我们的环境过期。

这是web.config文件的摘录:

<sessionState mode="SQLServer" timeout="1" allowCustomSqlDatabase="true" partitionResolverType="Microsoft.Office.Server.Administration.SqlSessionStateResolver, Microsoft.Office.Server, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" sessionIDManagerType="Lanap.BotDetect.Persistence.CustomSessionIDManager, Lanap.BotDetect, Version=2.0.15.0, Culture=neutral, PublicKeyToken=74616036388b765f" />

如您所见,应用程序托管在负载均衡的MOSS2007实例中,因此它具有sessionState DB的自定义SQL参数。

从我对SO的探索中,最常见的问题似乎是禁用的SQL Server代理或缺少/未运行的SQL Server代理作业。 我很肯定这不是这种情况。我去了主持会话的ASPStateTempSessions表,并检查它的行为是否一致。当我登录我的网站时,会创建一个带有会话ID的行,1到2分钟后会被销毁(会话已过期)。但是,如果我然后返回我的网站并刷新它,而不是注销,我仍然登录。如果我再次转到ASPStateTempSessions表,则会创建一个具有相同会话ID的新行。

据我所知,会话ID存活数周......重新启动浏览器所在的计算机不会改变任何内容。清除cookie确实如此。显然,浏览器中的cookie正在触发服务器上会话的重新创建。

另外,我很肯定我没有在无cookie模式下运行。首先,我可以在浏览器中看到cookie,并且它所访问的URL不包含sessionId(我被理解是一个区分标准,以了解是否正在运行无cookie会话)。

我有几个环境。一个是工作(我们的Live服务器),一个不是(我们的演示服务器)。比较两个web.config文件时,最可能意味着什么的区别是:

直播服务器:

<authentication mode="Forms">
  <forms loginUrl="/_layouts/ClientPortal/login.aspx" />
</authentication>

演示服务器:

<authentication mode="Forms">
  <forms loginUrl="/_layouts/ClientPortal/login.aspx" name=".ASPXAUTH" domain=".shlsolutions.net" protection="All" path="/" timeout="2880" />
</authentication>

这种差异的原因是应用程序需要能够在演示环境中使用跨域身份验证。

我很确定web.config文件中必须更改某些内容,但我真的不知道是什么。你能帮帮我吗?

编辑:Cookie复制/粘贴

.ASPXAUTH=BDEBD7975B717219A24D8D2FB22ADF523F4E63C9619B758A9F500CC2C9967156A9CFDB057A2DFC4DF9157A1D6E0F6EA3FBBA90C3D566FEB9E7F63AA4DBBDF68A32A5518175F6073E81677069C8205D9433306DCE331921237189DEECE59B6C7494EA6369C6D1BEAE544E83295D942DCE856718C5B095D695DB42D68BF75991A5EE37246E37B96F1675547E87338B89FE669EFD2A5AB38A15F7926025791F8FC17A02882B; path=/; domain=.shlsolutions.net
ASP.NET_SessionId=pa5v0f2mnc20jybxq4bmbr20; path=/; domain=uat.central.shlsolutions.net; HttpOnly
.ASPXAUTH=D3DCB91EA8705E7350AB2BEDBDC79F37C87CB391AFF81A9F07CAE72DB7BDBFA2AA62B1EF538C7EF77C7874D84A09DCDADF186884190B9BEDA56E73E9A1EED1948A6C75E618D4FD7AA9344C234B6472E3BEEC088911112877E7A77A6E2B27CA8EF69BE20B38591EDB9706225FA9831890B1C4684B3D9075153CB22CC37140F8C05811C44853DC3E7278740B7BBDC55627E801D81ED8EE8ABC07AA8CFF1F3F59EED9606ABB; path=/; domain=uat.central.shlsolutions.net; HttpOnly
__utma=164265915.107905765.1350568100.1350661280.1350898679.7; expires=Wed, 22 Oct 2014 09:37:58 GMT; path=/; domain=.uat.central.shlsolutions.net
__utmb=164265915.1.10.1350898679; expires=Mon, 22 Oct 2012 10:07:58 GMT; path=/; domain=.uat.central.shlsolutions.net
__utmc=164265915; path=/; domain=.uat.central.shlsolutions.net
__utmz=164265915.1350568100.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); expires=Mon, 22 Apr 2013 21:37:58 GMT; path=/; domain=.uat.central.shlsolutions.net

2 个答案:

答案 0 :(得分:0)

ASP.Net会话状态使用滑动过期机制,默认情况下应该在没有从创建会话的客户端听到60分钟后使会话状态对象到期。

有一个已知问题,SharePoint从不会从ASPStateTempSessions表中清除这些会话状态记录: http://blogs.msdn.com/b/toddca/archive/2009/03/17/sharepoint-session-state-the-guest-that-just-won-t-leave.aspx

希望这有帮助吗?

答案 1 :(得分:0)

查看您的web.config,看起来您有一个自定义会话ID管理器。 文档:http://captcha.biz/doc/aspnet/api/captcha-web-reference.html#BotDetect.Web.CustomSessionIdManager 您遇到的行为可能是由此自定义会话ID管理器执行的操作引起的。这个DLL用于Captcha,是否可以从web.config中取出它,看看情况是否有所改善?