2015-04-17 63 views
0

目前我ASP.Net Web窗体使用FormsAuthentication.SignOut(); 问题是这样的:如何正确退出形式的认证

用户去loginpage并在日志和被重定向到网页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

还是后退按钮工程。

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

+1

可能重复[ASP.NET认证登录和使用浏览器的后退按钮退出] (http://stackoverflow.com/questions/2686946/asp-net-authentication-login-and-logout-with-browser-back-button) –

+0

如果你点击返回按钮你要去页面A.once刷新页面并检查它是否是页面A或登录页面。在我看来,通过点击显示认证页面的后退按钮根本不是好习惯。 – Ajay

+0

但是这似乎是非常标准的。例如,看看gmail。如果用户注销,然后单击后退按钮,他将停留在登录页面上。 –

回答

0

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

试过所有的thsee:

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

也试过FormAthentcation.RedirectToLoginPage

还是后退按钮工程。原因是后退似乎不会触发任何事件。

也尝试添加meta标签,但仍然没有运气。

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

唯一的工作解决我发现是Java脚本:(需要将其添加到母版页是你拥有它)

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

非常通俗的方式来防止Back按钮的默认行为。为什么不只是“打开新标签”和“关闭当前标签”? – GoldBishop