【问题标题】:How to correctly log out of form Authentication如何正确注销表单身份验证
【发布时间】:2015-04-18 00:12:24
【问题描述】:

目前我的 ASP.Net 网络表单使用 FormsAuthentication.SignOut(); 问题是这样的:

用户进入登录页面并登录并被重定向到页面 A

在页面 A 中,他点击注销并被重定向到

登录页面。

在登录页面加载事件中,我有 FormsAuthentication.SignOut()。

我认为这会破坏身份验证 cookie。

但用户仍然可以使用浏览器的后退按钮转到 A 页面!

这是否被接受?如果不是最好的修复方法

=============== 我尝试了以下但仍然没有运气:

Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();

问题本身是重复的,但其他问题中提供的答案均无效。所以这不是一个有效的答案。

这些也不起作用:

Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.Cache.SetNoStore();
        FormsAuthentication.SignOut();
        Session.Abandon();

也试过 FormAthentcation.RedirectToLoginPage

后退按钮仍然有效。

更新:我找到了一种解决方法,但它仅在浏览器后退按钮导致任何表单/页面事件被触发时才有效。你知道后退按钮是否会触发任何表单事件吗?

【问题讨论】:

  • 如果您单击返回按钮,您将转到页面 A。一旦刷新页面并检查它是页面 A 还是登录页面。在我看来,单击返回按钮显示经过身份验证的页面根本不好练习。
  • 但这似乎很标准。看看 gmail 例如。如果用户注销,然后单击返回按钮,他将停留在登录页面。
  • @MikeCole “担心浏览器历史记录和后退按钮会让你头疼和生殖器疣” - 哈哈
  • @SNash 你在这里看过答案吗:stackoverflow.com/questions/16337149/… 提到你可能必须在某个事件处理程序中这样做。

标签: c# asp.net vb.net


【解决方案1】:

我花了 小时 试图找到答案。为了为未来正在寻找答案的人节省时间,我写下了我的发现。

尝试了所有这些:

        Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.Cache.SetNoStore();
        FormsAuthentication.SignOut();
        Session.Abandon();

也试过FormAthentcation.RedirectToLoginPage

后退按钮仍然有效。原因是后退按钮似乎没有触发任何事件。

也尝试添加元标记,但仍然没有成功。

根据我的研究,问题是所有这些解决方案都试图摆脱缓存,但“浏览器中的后退按钮不使用它”。

我找到的唯一可行的解​​决方案是java脚本:(它需要添加到母版页是你有它)

       <script>
           function preventBack() { window.history.forward(); }
           setTimeout("preventBack()", 0);
           window.onunload = function () { null };
</script>

【讨论】:

  • preventdefault 的非常笨拙的方式类似于“后退”按钮的行为。为什么不只是open new tabclose current tab
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-18
  • 1970-01-01
  • 2015-05-25
  • 2019-09-29
  • 1970-01-01
  • 1970-01-01
  • 2011-06-03
相关资源
最近更新 更多