会话超时在asp.net mvc 4 C#中不起作用。为什么?

时间:2014-04-02 11:21:23

标签: c# asp.net-mvc-4 session authentication

对于我的网站,我在web.config文件中配置了1周的登录会话超时

<system.web>
  <httpRuntime />

  <!-- Session keeps for 7 days -->
    <sessionState timeout="10080"></sessionState>
    <authentication mode="Forms">
      <forms loginUrl="~/" timeout="10080" slidingExpiration="true"/>
    </authentication>
  <!-- Configuration end  -->
</system.web>

以下是登录代码

    [AllowAnonymous]
    [HttpPost]
    public ActionResult Login(string Login, string Password)
    {
        // empty passwords are not allowed
        if (Password == "")
            return Redirect(Request.UrlReferrer.ToString());

        bool LoginResult = WebSecurity.Login(Login, Password, true);
        return Redirect(Request.UrlReferrer.ToString());
    }

我登录,关闭浏览器并再次打开它转到我的网站 - &gt;用户已登录。 我关闭浏览器,等待一段时间(约30分钟)去我的网站 - &gt;用户已注销。 为什么?会话应存储7天,但我们甚至没有30分钟。 Whan可能是问题的根源吗?

编辑1 我的主要想法是,我希望在几天内返回该网站并仍然以登录用户

打开它

4 个答案:

答案 0 :(得分:12)

可能您的IIS已配置为TimeOut的20分钟。

IIS会话超时更改为 1周 24小时,我希望能解决您的问题。

参考this

按照设计,超时的最大值设置为24小时。查看Microsoft支持forum

要实现更大的超时窗口,您可以考虑按SQL维护会话状态,如@Marc所示。

答案 1 :(得分:3)

尝试将会话状态转换为Sql(link here)。这应该会持续IIS重启/应用程序池回收等。

答案 2 :(得分:2)

网站Session.Timeout仅在小于应用程序池会话超时值时才有效;因为每当达到应用程序池会话超时值时,将重新启动该特定应用程序池。

http://www.codeproject.com/Articles/113287/Why-Session-Timeout-is-not-working-for-your-websit

答案 3 :(得分:1)

当应用程序处于空闲状态(一段时间内没有请求)时,IIS可能会将其关闭。这会破坏所有Sessions

Authentication将数据存储在数据库中,因此可以在重新启动后继续存在。