1

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

这是 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
4

2 回答 2

0

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

存在一个已知问题,即 SharePoint 永远不会从 ASPStateTempSessions 表中清除这些会话状态记录:http: //blogs.msdn.com/b/toddca/archive/2009/03/17/sharepoint-session-state-the-客人刚刚赢得离开.aspx

希望这可以帮助?

于 2012-10-19T16:26:46.900 回答
0

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

于 2012-10-23T09:09:00.567 回答