asp.net中的窗体身份验证(完整篇之六:登出后不能通过后退回来面来的页面)
2012-05-30 21:14
260 查看
这个标题好长啊。
原本是没打算写下这一篇的,因为觉得身份验证到了登出之后,就算完成了。可是后来有博友提出疑问,登出之后,点击浏览器上的后退按钮,还是可以退回到登出前页面,起不到身份验证的作用。
事实上,就算使用后退按钮回到原来的页面,也只能看看页面内容,而不能对网页进行操作。一但进行操作的话,还是会需要重新登录的。
也许,有些朋友对页面的安全性要求比较高,连看都不想让人家看到。那这要怎么办?
这要从浏览器的缓存说起了。在N久以前,网络的宽带慢的是很慢很慢,所以,浏览器都有一个叫做“缓存”的功能。当你浏览了网页之后,就会把这个网页先缓存到本地计算机中,等你下一次再访问该网页时,浏览器会将缓存到本机计算机中的内容与服务器上的内容进行比较,如果没有更新,就不从服务器上读取网页,而是直接显示本地计算机中缓存的内容。这样做有两个好处,第一、客户端可以快速打开网页,节省等待的时间;第二、减少服务器压力。
所以,这个功能就一直保留了下来,直到今天、明天或者后天。
如果想不让浏览器缓存网页,最简单的方法就是使用HTML代码来实现,如以下代码所示。
[xhtml] view plaincopyprint?
<meta http-equiv="Cache-Control" content="no-cache" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="-1" />
曾经,在ASP中使用了类似于以上代码的代码,那真是天下无敌,无论是IE浏览器还是Netscape浏览器(多让人怀念的浏览器啊),都能完美地实现不能后退的功能。
美滋滋地进行了测试,这回,又让我跌了一次眼镜居然除了IE8(我没安装别的版本的IE)能实现不能后退的功能之外,chrome6、Opera10和FireFox3.5下的测试全部没通过。
最后,我不得不使用asp.net的绝招了,在CS中加上以下代码:
[c-sharp] view plaincopyprint?
Response.Cache.SetNoStore();
最后,再建议一下,对于单个文件而言,最好在aspx文件中加上<meta>、在CS文件中将以上代码都加上,鬼才知道用户浏览器支持什么啊。还是宁多勿少吧。
原本是没打算写下这一篇的,因为觉得身份验证到了登出之后,就算完成了。可是后来有博友提出疑问,登出之后,点击浏览器上的后退按钮,还是可以退回到登出前页面,起不到身份验证的作用。
事实上,就算使用后退按钮回到原来的页面,也只能看看页面内容,而不能对网页进行操作。一但进行操作的话,还是会需要重新登录的。
也许,有些朋友对页面的安全性要求比较高,连看都不想让人家看到。那这要怎么办?
这要从浏览器的缓存说起了。在N久以前,网络的宽带慢的是很慢很慢,所以,浏览器都有一个叫做“缓存”的功能。当你浏览了网页之后,就会把这个网页先缓存到本地计算机中,等你下一次再访问该网页时,浏览器会将缓存到本机计算机中的内容与服务器上的内容进行比较,如果没有更新,就不从服务器上读取网页,而是直接显示本地计算机中缓存的内容。这样做有两个好处,第一、客户端可以快速打开网页,节省等待的时间;第二、减少服务器压力。
所以,这个功能就一直保留了下来,直到今天、明天或者后天。
如果想不让浏览器缓存网页,最简单的方法就是使用HTML代码来实现,如以下代码所示。
[xhtml] view plaincopyprint?
<meta http-equiv="Cache-Control" content="no-cache" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="-1" />
[c-sharp] view plaincopyprint? //禁止客户端缓存服务器上的网页 Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache); //添加HTTP头 //HTTP 1.0标准,作用相当于<meta http-equiv="Pragma" content="no-cache" /> Response.AddHeader("pragma", "no-cache"); //HTTP 1.1标准,作用相当于<meta http-equiv="Cache-Control" content="no-cache" /> Response.AddHeader("Cache-Control", "no-cache"); //设置不缓存 Response.CacheControl = "no-cache"; //设置在浏览器上缓存的页面的过期时间 Response.Expires = -1; //从缓存中移除的日期 Response.ExpiresAbsolute = DateTime.Now.AddSeconds(-1); //禁止客户端缓存服务器上的网页 Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache); //添加HTTP头 //HTTP 1.0标准,作用相当于<meta http-equiv="Pragma" content="no-cache" /> Response.AddHeader("pragma", "no-cache"); //HTTP 1.1标准,作用相当于<meta http-equiv="Cache-Control" content="no-cache" /> Response.AddHeader("Cache-Control", "no-cache"); //设置不缓存 Response.CacheControl = "no-cache"; //设置在浏览器上缓存的页面的过期时间 Response.Expires = -1; //从缓存中移除的日期 Response.ExpiresAbsolute = DateTime.Now.AddSeconds(-1);
曾经,在ASP中使用了类似于以上代码的代码,那真是天下无敌,无论是IE浏览器还是Netscape浏览器(多让人怀念的浏览器啊),都能完美地实现不能后退的功能。
美滋滋地进行了测试,这回,又让我跌了一次眼镜居然除了IE8(我没安装别的版本的IE)能实现不能后退的功能之外,chrome6、Opera10和FireFox3.5下的测试全部没通过。
最后,我不得不使用asp.net的绝招了,在CS中加上以下代码:
[c-sharp] view plaincopyprint?
Response.Cache.SetNoStore();
[c-sharp] view plaincopyprint? protected void Application_BeginRequest(Object sender, EventArgs e) { HttpContext.Current.Response.Cache.SetNoStore(); } protected void Application_BeginRequest(Object sender, EventArgs e) { HttpContext.Current.Response.Cache.SetNoStore(); }
最后,再建议一下,对于单个文件而言,最好在aspx文件中加上<meta>、在CS文件中将以上代码都加上,鬼才知道用户浏览器支持什么啊。还是宁多勿少吧。
相关文章推荐
- asp.net中的窗体身份验证(完整篇之六:登出后不能通过后退回来面来的页面)
- asp.net中的窗体身份验证(完整篇之三:用户登录页面)
- asp.net中的窗体身份验证(完整篇之三:用户登录页面)
- asp.net中的窗体身份验证(完整篇之一:创建asp.net的窗体身份验证方式)
- asp.net中的窗体身份验证(完整篇之一:创建asp.net的窗体身份验证方式)
- asp.net中的窗体身份验证(完整篇之二:asp.net的窗体身份验证过程)
- asp.net中的窗体身份验证(完整篇之四:获得用户数据)
- asp.net中的窗体身份验证(完整篇之四:获得用户数据)
- asp.net中的窗体身份验证(完整篇之五:退出登录)
- asp.net中的窗体身份验证(完整篇之附录:web.config中相应节点详解)
- asp.net中的窗体身份验证(完整篇之附录:web.config中相应节点详解)
- asp.net中的窗体身份验证(完整篇之五:退出登录)
- asp.net中的窗体身份验证(完整篇之二:asp.net的窗体身份验证过程)
- ASP.Net 2.0 窗体身份验证机制-转
- ASP.NET窗体身份验证详解
- ASP.Net 2.0 窗体身份验证机制-转+自己代码注释示例与更详细的说明
- asp.net中使用窗体身份验证
- 如何使用 C# .NET 在 ASP.NET 应用程序中实现基于窗体的身份验证
- 转:ASP.NET MVC:窗体身份验证及角色权限管理示例
- 防止asp.net页面通过IE后退