【问题标题】:MVC 3.0 sessionstate timeout and authentication Forms timeoutMVC 3.0 会话状态超时和身份验证表单超时
【发布时间】:2014-05-14 10:15:09
【问题描述】:

我有一个 MVC3 网站,如果会话超时到期,我必须将用户重定向到登录页面。经过一番研究,我知道我必须添加到 web.config

<sessionState mode="InProc" cookieless="false" timeout="1"></sessionState>

设置用户会话超时。在这种情况下,如果用户空闲,它将在 1 分钟后清除用户会话数据。我已经添加了这个

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

在会话超时的情况下将用户重定向到登录页面。实际上,它有效,但我有一些问题要了解到底发生了什么:

  1. 这两个标签之间有什么关系?它们之间的依赖关系是什么?
  2. 是否必须将两个标签的超时属性 = 1?
  3. 有没有更好的方法可以让我完成我需要的工作。

提前致谢。

【问题讨论】:

  • 对于#3,您从未解释过您的“需要”是什么。

标签: asp.net-mvc-3 forms-authentication session-timeout


【解决方案1】:

SessionState和Forms Authentication的区别是:

SessionState:为应用程序的每个请求创建一个会话。哪个会有自己的超时时间。

表单身份验证:身份验证是在用户使用您的应用程序进行身份验证时创建的。这也将有自己的超时。这个超时值存储为票证的一部分,票证被加密并存储在 cookie 或 URL(无 cookie 身份验证)中,我相信。

如果您想结束基于会话的用户身份验证,您必须将其写入您的应用程序。我这样做的唯一原因是,我将经过身份验证的数据存储在会话中,以便交叉请求。

【讨论】:

    【解决方案2】:

    sessionState 元素为当前应用程序配置会话状态设置。 当新客户端开始与 Web 应用程序交互时,会发出一个会话 ID,并在会话有效时将其与来自同一客户端的所有后续请求相关联。此 ID 用于维护与跨请求的客户端会话关联的服务器端状态。该元素控制 ASP.NET 应用程序如何为每个客户端建立和维护此关联。 这种机制非常灵活,可让您在进程外托管会话状态信息并跟踪状态,而无需使用 cookie 等。

    超时: 指定会话在被放弃之前可以空闲的分钟数。对于进程内和状态服务器模式,超时属性不能设置为大于 525,601 分钟(1 年)的值。 会话超时配置设置仅适用于 ASP.NET 页面。更改会话超时值不会影响 ASP 页的会话超时。同样,更改 ASP 页的会话超时不会影响 ASP.NET 页的会话超时。 默认为 20 分钟。

    表单身份验证:- 这是一种基于 cookie 的身份验证,其中用户名和密码作为 cookie 文件存储在客户端计算机上,或者通过 URL 为每个请求发送。基于表单的身份验证向用户提供一个基于 HTML 的网页,提示用户输入凭据。

    以上描述回答了你所有的问题

    【讨论】:

    • 其实我没完全明白你说的“会话超时配置设置只适用于 ASP.NET 页面。更改会话超时值不会影响 ASP 页面的会话超时” . 同样,更改 ASP 页面的会话超时不会影响 ASP.NET 页面的会话超时。默认为 20 分钟。而且我仍然对身份验证表单的超时和 sessionState 的超时感到困惑。
    • SessionState 基本上适用于跨 ASP.net 应用程序的所有会话,而身份验证仅适用于登录页面的用户名和密码身份验证
    猜你喜欢
    • 2013-10-22
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    • 2013-11-06
    • 1970-01-01
    • 2016-06-23
    相关资源
    最近更新 更多