【问题标题】:Problem: control Session timeout问题:控制会话超时
【发布时间】:2011-09-27 06:57:00
【问题描述】:

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

我将 UserId 存储在返回 null 的 Session 中,它是 Guid。问题是当我使用会员资格时使用

Membership.GetUser().ProviderUserKey

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

【问题讨论】:

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

标签: asp.net membership


【解决方案1】:

为了完成 Jan 和 Neil 的回答,您应该查看您的 web.config 并设置 两个超时sessionState身份验证)

<sessionState timeout="300"/>

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

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

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

【讨论】:

  • 我认为这不会解决问题。我的超时时间都是 2880,这太大了!我使用 FormsAuthentication.SetAuthCookie(userName, true); 登录用户还有什么要做的吗?
【解决方案2】:

您的会话可能仍处于活动状态(如果您将其设置为 300 分钟),但 ASP.NET 成员资格可能即将到期?

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-24
      • 2017-12-01
      • 2011-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多