MVC5 无 cookie 会话 ID 未在不同的浏览器中进行身份验证,为什么?



我在web.config中使用cookieless创建了一个新的MVC5网页。我使用 ASP 标识通过默认模板登录表单登录应用程序。

我的网址如下所示:

http://localhost:48839/(S(wjz4mdav4ue0osbywkol0zuv))/Home/

我使用 Chrome 登录。将网址复制到Edge或Firefox,令我惊讶的是,没有登录我。我没有看到我的用户名等等...

Request.IsAuthenticated在Edge和Firefox中false

MVC 如何对用户进行身份验证?它是否使用浏览器的用户代理字符串?

我记得几年前这样做(也许是MVC3?(这确实有效。

编辑: 这是我的 web.config 中的条目:

<sessionState cookieless="true" />

我还注意到,在Chrome中使用隐身模式具有相同的行为。

来自 MSDN:

ASP.NET 会话状态标识来自同一浏览器的请求 作为会话的有限时间窗口,并提供一种持久化的方法 该会话持续时间的变量值。

这意味着不同浏览器的会话状态会有所不同,并且新会话将获得自己的 SessionId,在您的情况下,该 SessionId 以 URL 传递,而不是在 cookie 中传递

还有一件事是重新生成过期的会话 ID:

默认情况下,将回收无 Cookie 会话中使用的会话 ID 值。也就是说,如果使用已过期的会话 ID 发出请求,则会使用随请求提供的 SessionID 值启动新会话。这可能会导致在多个浏览器使用包含无 Cookie 会话 ID 值的链接时无意中共享会话。(如果链接通过搜索引擎、电子邮件或其他程序传递,则可能会发生这种情况。您可以通过将应用程序配置为不回收会话标识符来减少会话数据被共享的可能性。为此,请将 sessionState 配置元素的 regenerateExpiredSessionId 属性设置为 true。当使用过期的会话 ID 发出无 Cookie 会话请求时,这会生成新的会话 ID。

您可以尝试将regenerateExpiredSessionId设置为 false,同时考虑到可能的缺点。

最新更新