【问题标题】:Forms Authentication on browser exit浏览器退出时的表单身份验证
【发布时间】:2012-12-13 22:08:29
【问题描述】:

今天早上我和我的同事讨论了关于存储 auth cookie 的问题 记住我 = 假。

MVC4、表单验证、C#.Net、Visual Studio 2012、IIS 7.5、进程内会话

  1. 用户登录,(RememberMe = false)并导航到应用程序中的项目。默认会话超时设置为 30 分钟,

  2. 用户复制了网址并关闭了浏览器(IE9)

  3. 打开新浏览器 (IE9) 并粘贴复制的 URL,UI 重定向到 loginPage。

这里我说步骤1中创建的会话仍然有效。,在关闭浏览器时,浏览器丢失了AuthCookie。

他说会话也是基于浏览器会话创建的。我有点糊涂了。

请告诉我实际发生了什么。

抱歉英语不好

【问题讨论】:

    标签: asp.net .net authentication asp.net-mvc-4


    【解决方案1】:

    RememberMe = false 表示发给用户的身份验证 cookie 不是持久的(cookie 的过期时间设置为“SESSION”)。也就是说,当浏览器会话结束时,cookie 会丢失。 RememberMe = true 表示创建一个持久 cookie 并跨多个浏览器会话保存(cookie 的过期设置为特定日期,通常在 web.config 中配置)。

    阅读documentation here

    【讨论】:

    • 如果我关闭浏览器,服务器将如何知道结束/终止存储在服务器中的会话,HTTP 是无状态的。
    • 杀死cookie的信息存储在浏览器的cookie中,而不是HTTP。
    • @Nash Kiwi 是正确的。 cookie 的过期属性(存储在 cookie 本身中)设置为“session”,这意味着当会话结束(即浏览器关闭)时,cookie 将被销毁。
    • @四十二,我同意从浏览器的角度来看,浏览器中的Cookie会被杀死。但是在 Web Server 中创建的 Session 呢?你的意思是说,在关闭浏览器时,Web Server 中创建的 Session 在到期之前也会被杀死。
    • @Nash 在 mvc 中服务器端没有会话,除非您自己创建和管理它。
    【解决方案2】:

    我假设您使用的是默认 Session-State Mode,即 InProc。一个会话生成一个SessionID,这个ID 存储在一个cookie 中。该 cookie 被发送给用户,当使用该 cookie 发出请求时,会话处于活动状态。 ID 本身标识了唯一的浏览器,这就是为什么当您同时使用两个不同的浏览器时,您可以使用不同的帐户登录同一个网站。但是,您不能从同一浏览器的不同选项卡登录不同的帐户(除非该网站专门定制了他们的网站以支持该功能)。

    通过关闭浏览器,此 cookie 将被删除,因此会话将在达到其超时期限时结束。您被带到 UI 页面的原因是因为您拥有的新 cookie 不再具有相同的会话 ID,因此,无论出于何种意图和目的,您都是新用户。

    【讨论】:

    • 但是,会话在服务器上仍然有效吗?根据设置,它将在到期时间到期。如果我从浏览器中破解会话,我仍然可以与服务器通信。此外,如果获取会话 ID 并将其传递给新型浏览器,比如 Chrome ..我可以与服务器通信吗?如果我错了,请纠正我。
    • 是的,我认为这是正确的。在达到超时期限之前,会话仍然存在于服务器上。此外,如果您强制不同的浏览器发送相同的 cookie,会话应该继续(尽管您可能仍需要在新浏览器中再次登录)。我还没有尝试过,所以其他人可能能够确认或纠正我。
    猜你喜欢
    • 2019-04-06
    • 1970-01-01
    • 2016-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-07
    • 2015-03-20
    • 1970-01-01
    相关资源
    最近更新 更多