我的会话每20分钟更新一次。我将超时设置为300分钟但仍然可能因为应用程序池回收而更新。
我正在存储UserId,它是会话中的Guid,返回null。问题是我使用
使用会员资格Membership.GetUser().ProviderUserKey
它工作正常。但显然它会进行数据库调用。如何防止此问题发生?为什么Membership.GetUser()。ProviderUserKey成功而Session不成功?
答案 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当前经过身份验证的用户表单。
会话和身份验证具有不同的超时 - 因此它的会话超时但用户仍然经过身份验证是有效的。