代码之家  ›  专栏  ›  技术社区  ›  Chaddeus

救命啊!为什么我的IE用户会被随机注销?

  •  1
  • Chaddeus  · 技术社区  · 14 年前

    ASP.NET MVC 2.0,以下是我的身份验证代码:

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Login(string username, string password, string returnUrl) {
        if (ModelState.IsValid) {
            // Attempt to login
            var loginSuccessful = provider.ValidateUser(username, password);
    
            if (loginSuccessful) {
                FormsAuthentication.SetAuthCookie(username, true);
                if (!String.IsNullOrEmpty(returnUrl))
                    return Redirect(returnUrl);
    
    
                return RedirectToAction("Index", "Home");
    
            }
        }
        return View(Language + "/Login", Vd);
    }
    

    相当直接的默认身份验证。可以很好地登录。然而,IE用户会随机自动注销,即使他们在网站上很活跃。其他浏览器工作正常。以下是来自web.config的表单身份验证:

    <authentication mode="Forms">
        <forms loginUrl="~/en/Account/Login" timeout="2880"/>
    </authentication>
    

    在这个案子里我该从哪里着手?我找到虫子了吗?

    2 回复  |  直到 14 年前
        1
  •  1
  •   Tim Roberts    14 年前

    据我所知,一切似乎都很好,但是,你的问题是不是与你使用了一个 持久的 饼干?我认为持久性cookies并不意味着超时,这就是为什么您可能会使用它们。

    试着使用一个非持久的,看看是否有效:

    FormsAuthentication.SetAuthCookie(username, false);
    

    另外,还有一些其他的注意事项:

    • 我认为web.config中的timeout属性是以分钟为单位指定的。你已经指定了超过2000分钟。
    • 默认情况下,滑动过期是禁用的,因此在n分钟后它仍将超时。如果这不是你想要的,那么添加一个 slidingExpiration="true" <forms/> 元素。
        2
  •  0
  •   TrustyCoder    14 年前

    进程内或进程外使用哪种会话模式?如果将进程内与非持久性cookie一起使用,并且应用程序池被回收,则会话将丢失。