【问题标题】:Form cookie vs Session cookie in C# form authenticationC# 表单身份验证中的表单 cookie 与会话 cookie
【发布时间】:2021-10-07 04:07:11
【问题描述】:

我正在用 C# 开发一个 .NET MVC Web 应用程序,它实现了表单身份验证。

我的web.config 文件中有以下配置:

<authentication mode="Forms">
  <forms loginUrl="~/Home/Register" timeout="10080" name="Test" slidingExpiration="true"/>
</authentication>
<sessionState cookieName="Test" timeout="5040"/>

我有一些问题:

  1. 会话状态cookie名称和表单cookie名称使用相同的名称是可以的,否则会导致超时等参数出现问题/冲突?
  2. 设置slidingExpiration="true"会导致自动更新超时,还是需要在后端调用一些特殊函数?
  3. 我已阅读此答案的第二条评论:https://stackoverflow.com/a/17813200/1080355。所以我将表单 auth cookie 超时设置为会话超时的两倍。我做得对吗?

【问题讨论】:

    标签: c# asp.net-mvc cookies forms-authentication


    【解决方案1】:
    1. 为两个cookie设置相同的名称会导致问题,请避免,为两个cookie设置唯一的名称

    2. Cookie 会自动更新,但当然只有在请求时才会更新。只要没有来自浏览器的请求,就没有什么可更新的。更新只是发布一个覆盖旧 cookie 的新 cookie。

    编辑:不知道为什么这不清楚。也许这会有所帮助:浏览器发出请求,服务器发现 cookie 有效但即将过期。所以服务器发出一个新的cookie。形式上,是表单身份验证模块自动执行此操作。

    1. 表单 cookie 超时和会话状态超时完全不相关,没有任何规则可以使两者相互依赖。

    【讨论】:

    • 我不明白第二个答案。在请求期间如何更新 cookie?我有两个cookie,一个用于formAuth,另一个用于会话。由于我没有更新 cookie 的代码,我想知道是否有任何子类或浏览器本身根据每个请求自动更新它们?这意味着什么:“更新只是发布一个覆盖旧 cookie 的新 cookie”?
    • 另外,我想知道slidingExpiration="true"是我自己管理的参数吗?我想知道将其设置为true 会触发哪些功能以及它将如何导致更新到期时间...?
    • 编辑了我的答案。这可能比您预期的要简单,并且可能正因为如此,您希望这种机制能够做一些不同于它已经做的事情。除了将滑动过期设置为 true 之外,您无需执行任何其他操作。
    • 旁注 - 我强烈建议将表单模块替换为 SAM 模块。它做得更好。 wiktorzychla.com/2014/11/…
    猜你喜欢
    • 2014-04-01
    • 1970-01-01
    • 2012-07-25
    • 2016-01-14
    • 1970-01-01
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多