如何正确注销表单身份验证

时间:2015-04-17 13:38:56

标签: c# asp.net vb.net

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

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

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

loginpage。

在登录页面加载事件中,我有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

仍然后退按钮有效。

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

1 个答案:

答案 0 :(得分:0)

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

尝试了所有这些:

        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>