表单 cookie 与 C# 表单身份验证中的会话 cookie

问题描述

我正在用 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 超时设置为会话超时的两倍。我的做法正确吗?

解决方法

  1. 为两个 cookie 设置相同的名称会导致问题,请避免这种情况,为两个 cookie 设置唯一的名称

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

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

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