2011-09-27 112 views
0

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

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

Membership.GetUser().ProviderUserKey 

它工作正常使用会员。但显然它会进行数据库调用。我怎样才能防止这个问题发生?为什么Membership.GetUser()。ProviderUserKey成功,而Session不?

+0

请发布您的web.config;并看看我的回答 –

回答

0

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

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

1

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

你是否增加了认证超时?

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

为了完成简的和Neil的回答,你应该看看你的web.config并设置都超时的sessionState认证

<sessionState timeout="300"/> 

的sessionState timeout指定会话在放弃之前可以闲置的分钟数。默认值为20。

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

形式超时用于指定形式认证会话有限的寿命。默认值是30分钟。如果发布持久表单身份验证Cookie,则还会使用timeout属性来设置持久cookie的生存期。

+0

我不认为这将解决问题。我有两个超时为2880这太大了!我使用FormsAuthentication.SetAuthCookie(userName,true)登录用户;还有其他事情要做吗? – Jaggu