问题:控制会话超时

时间:2011-09-27 06:57:01

标签: asp.net membership

我的会话每20分钟更新一次。我将超时设置为300分钟但仍然可能因为应用程序池回收而更新。

我正在存储UserId,它是会话中的Guid,返回null。问题是我使用

使用会员资格
Membership.GetUser().ProviderUserKey

它工作正常。但显然它会进行数据库调用。如何防止此问题发生?为什么Membership.GetUser()。ProviderUserKey成功而Session不成功?

3 个答案:

答案 0 :(得分:3)

为了完成Jan和Neil的答案,您应该查看 web.config 并设置两个超时 sessionState 认证

<sessionState timeout="300"/>

会话状态超时指定会话在被放弃之前可以空闲的分钟数。默认值为20.

<authentication mode="Forms">
  <forms loginUrl="Login.aspx"  timeout="300" />
</authentication>

表单超时用于指定表单身份验证会话的有限生存期。默认值为30分钟。如果发出持久性表单身份验证cookie,则timeout属性也用于设置持久性cookie的生存期。

答案 1 :(得分:1)

您的会话可能仍然存在(如果您将其设置为300分钟)但ASP.NET成员资格可能已过期?

您是否也增加了身份验证超时?

<authentication mode="Forms">
  <forms loginUrl="Login/" timeout="180"/>
</authentication>

答案 2 :(得分:0)

您正在混合身份验证和会话。这是两个完全不同的概念。 GetUser()返回您的MemberShipProvider当前经过身份验证的用户表单。

会话和身份验证具有不同的超时 - 因此它的会话超时但用户仍然经过身份验证是有效的。

相关问题