ASP.NET身份validationlogin和使用浏览器后退button注销

我正在寻找一个解决scheme,用户使用浏览器的后退button导航到上一页登出。

我有一个Web应用程序在asp.net中构build,并使用自定义成员资格提供程序进行身份validation和授权。 一切正常,除非用户点击注销链接注销应用程序并redirect到默认封面,如果用户点击浏览器上的“后退”button,它实际上会返回到原来的位置,数据仍然会显示。

当然,他们不能在该页面上做任何事情,点击任何链接,他们将重新导向到login页面。 但是,这些信息显示正在让很多用户感到困惑。

我只是想知道是否有什么办法可以清除浏览器的历史,所以使用不能回去,或当他们点击后退button,并让他们redirect到login页面。

谢谢

担心浏览器历史logging和后退button会给你头痛和生殖器疣。 有内置的设施来处理这个问题。

您的注销链接/button应指向包含此代码的页面,以及任何您想要的内容。

[vb.net]

Imports System.Web.Security Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles MyBase.Load Session.Abandon() FormsAuthentication.SignOut() End Sub 

[C#]

 using System.Web.Security; private void Page_Load(object sender, System.EventArgs e) { // Put user code to initialize the page here Session.Abandon(); FormsAuthentication.SignOut(); } 

代码来自这个页面 ,是有效的,但页面是很难的眼睛。

关于后退行为的一个很好的问答可以在这里find。

更新:

根据我与马修的谈话,禁用个别页面的caching敏感或volitile可以完成代码如下:

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

我很想知道它是否适合你,因为它对我有用。

您可以使用javascript来禁用后退button(通常通过将用户发送到转发到另一个页面的页面,以便点击后再次向前发送)。 一个持久的用户仍然可以在历史上退回两个步骤,并跨越循环。

该页面在浏览器的caching中。 你可以要求浏览器不要caching任何东西,但是这会损坏性能,有时会显着,所以我不会推荐它。

这段代码非常有用

 Response.Cache.SetCacheability(HttpCacheability.NoCache); 

只把这个代码放在加载事件上,在master pagen的情况下,但它只适用于IE,IE和Firefox我使用

 Response.Cache.SetCacheability(HttpCacheability.NoCache); Response.Cache.SetNoStore(); 

你的答案

解决方法是将以下JavaScript代码添加到logout.aspx页面的部分:

 <script type="text/javascript"> window.history.forward(1); </script> 

如果用户通过按下后退button进入注销页面,此JavaScript代码将转发用户。

如果您需要确保用户无法在注销后返回页面,则必须要求浏览器不要在每个页面上包含与以下代码类似的代码来caching任何页面:

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

如果有帮助,可以尝试使用HttpResponse.Cache属性:

 Response.Cache.SetExpires(DateTime.Now.AddSeconds(60)); Response.Cache.SetCacheability(HttpCacheability.Public); Response.Cache.SetValidUntilExpires(false); Response.Cache.VaryByParams["Category"] = true; if (Response.Cache.VaryByParams["Category"]) { //… } 

或者可以使用HttpResponse.CacheControl完全阻止页面的caching,但不赞成使用上面的Cache属性:

 Response.CacheControl = “No-Cache”; 

或者你可以真的疯了,一切手工完成:

 Response.ClearHeaders(); Response.AppendHeader(“Cache-Control”, “no-cache”); //HTTP 1.1 Response.AppendHeader(“Cache-Control”, “private”); // HTTP 1.1 Response.AppendHeader(“Cache-Control”, “no-store”); // HTTP 1.1 Response.AppendHeader(“Cache-Control”, “must-revalidate”); // HTTP 1.1 Response.AppendHeader(“Cache-Control”, “max-stale=0″); // HTTP 1.1 Response.AppendHeader(“Cache-Control”, “post-check=0″); // HTTP 1.1 Response.AppendHeader(“Cache-Control”, “pre-check=0″); // HTTP 1.1 Response.AppendHeader(“Pragma”, “no-cache”); // HTTP 1.1 Response.AppendHeader(“Keep-Alive”, “timeout=3, max=993″); // HTTP 1.1 Response.AppendHeader(“Expires”, “Mon, 26 Jul 1997 05:00:00 GMT”); // HTTP 1.1 

参考

实际上,我find了一个解决scheme,我将下面的代码片段添加到母版页的页面加载方法。

 Page.Response.Cache.SetCacheability(HttpCacheability.NoCache); 

感谢您的答复:)