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);
感谢您的答复:)