【问题标题】:Timeout MVC website after period of inactivity不活动时间后超时 MVC 网站
【发布时间】:2017-08-17 09:02:53
【问题描述】:

在一段时间不活动后,我试图让我的 MVC 站点超时。

我尝试了很多方法,但似乎都没有奏效。我尝试了以下方法:

使用 CookieAuthenticationOptions 类

  app.UseCookieAuthentication(new CookieAuthenticationOptions
  {
      ExpireTimeSpan = TimeSpan.FromMinutes(1),
      AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
      LoginPath = new PathString("/xxx")
   });

在 web.config 中使用表单身份验证元素:

<authentication mode="Forms" >
    <forms loginUrl="~/xxxx"  timeout="1"/>
</authentication>

并且还使用配置文件中的 sessionState:

<sessionState timeout="1"/>

但这些似乎都不起作用。

我缺少什么,哪种方法最好?

【问题讨论】:

    标签: asp.net-mvc cookies timeout session-cookies setcookie


    【解决方案1】:

    首先,您在这里混淆了两个概念:会话超时和身份验证超时。换句话说,没有“网站超时”之类的东西。你需要弄清楚你实际上想在这里控制什么。接下来,会话超时是滑动的,所以只要用户在积极使用网站,他们的会话就永远不会超时。但是,身份验证超时是绝对的,因此在指定的时间过去后,用户将被注销,无论他们是否正在积极使用该网站。

    就身份验证超时而言,您实际上在这里也混淆了两个概念:身份和成员身份(表单身份验证)。您拥有的第一段代码是如何在 ASP.NET Identity 中控制身份验证超时,而第二段代码是如何使用 ASP.NET Membership 进行控制。两者是互斥的,显然需要与您的项目使用的实际身份验证机制相匹配。

    【讨论】:

    • 感谢您的回复。所以我试图将两者结合起来。我正在使用 FormsAuthentication.SetAuthCookie 和 Response.SetCookie 传递一个 HttpCookie,它会在 10 小时后过期。但如果网站 30 分钟未使用,我也希望会话超时。 FormsAuthentication.SetAuthCookie 和 Response.SetCookie 部分似乎只在会话超时时起作用。
    • 只需要&lt;sessionState ... timeout="30" /&gt;。如果用户在 30 分钟内完全处于非活动状态,则会话将过期。请记住,用户必须完全处于非活动状态。向网站发出的任何请求(包括 AJAX)都会重置超时。
    • 这不起作用。我猜是因为 cookie 存在,它会覆盖其他所有内容,只是让用户重新登录。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    • 2014-08-21
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    相关资源
    最近更新 更多