【问题标题】:MVC3: How to stop session expiring after 30 mins?MVC3:如何在 30 分钟后停止会话过期?
【发布时间】:2011-06-27 18:23:32
【问题描述】:

我正在尝试更改会话到期所需的时间。我的观点正在验证与<Authorize()> 的会话,效果很好。

我正在按如下方式创建会话:

FormsAuthentication.SetAuthCookie(model.UserName, True)
Return RedirectToAction("Welcome", "Home")

我的密码已通过验证

FormsAuthentication.Authenticate(username, password)

我的路由 web.config 包含在 system.web 中

<sessionState timeout="7200"></sessionState>

我的授权节点如下:

<authentication mode="Forms">
  <forms loginUrl="~/Home/Login" timeout="7200" cookieless="UseCookies" name=".LoginCookie" slidingExpiration="true" >
    <credentials passwordFormat="Clear">
      <user name="user" password="pass" />
    </credentials>
  </forms>
</authentication>

登录后,我什至可以验证特定 cookie 'LoginCookie' 是否设置为在几天后过期,但如果我 30 分钟不活动,我的用户将被发送到登录页面。

最后,这在 Visual Studio 中似乎可以正常工作,就像在我做过的网站上一样,但由于某种原因,一旦在 IIS 中它就不能(生产环境)。

非常感谢我可能错过的任何帮助。

【问题讨论】:

    标签: asp.net authentication session-state


    【解决方案1】:

    这可能是您的 IIS 应用程序池设置为回收的时候。然后缓存变量会丢失,除非它们存储在 SQL Server 或 State Server 中。

    检查 IIS 内 AppPool 中的设置。如果需要,您可以延长空闲超时时间。

    另请阅读这篇文章:http://support.microsoft.com/default.aspx?scid=kb;en-us;324772

    【讨论】:

    • 此特定应用程序池的“常规时间间隔(分钟)”设置为 1740,所以我不确定这是否是问题所在?据此,它是每 29 小时一次,除非我需要寻找不同的设置?在“编辑应用程序池回收设置”下,除此之外没有其他任何检查
    • 还有一个空闲超时设置。如果 App-pool 在此期间处于空闲状态,则无论常规设置如何,它都会重新启动。
    • 我过去用 SQL Server 做过这个,但最近一直在避免它,因为最近我不必这样做......但现在我想起来了,我所有的其他应用程序都在使用 MySQL数据提供程序,因此它很可能会自动将会话状态存储在其中...我设置了 SQL 提供程序,因此如果可行,我会将您的标记为已回答。希望这能解决问题,因为我必须在 AM 中启动一些东西 =(
    • 注意 - 令人困惑的是,此设置不在回收设置下。它在“流程模型”设置下。
    • 即使使用 SQL 作为我的会话持有者,我的用户仍然被踢出 =/
    猜你喜欢
    • 2010-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多