c#--session--用户关掉页面清空session

asp.net用户注销或者关闭网页时清除用户Cookie

一般在系统中都会用到cookie,但是有时候需要在用户注销或者关闭网页时将所有cookie给清除,所谓清除cookie不是说从硬盘上将cookie从硬盘上面删除,而是让需要删除的cookie过期,
1.用户注销时删除cookie的方法很简单:

for (int i = 0; i <Response.Cookies.Count; i++)
{
Response.Cookies[i].Expires = DateTime.Now;//cookie将马上过期
}

2.有时候用户退出系统不一定会点击注销按钮,而是选择直接关闭浏览器,这时应该怎么删除cookie呢,查了一下,如果给cookie不设置过期时间,那么cookies的有效期即为浏览器的生命周期,当浏览器关闭时cookies(未设置过期时间)自动过期;
————————————————
版权声明:本文为CSDN博主「Baple」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Baple/article/details/6855715

.
.
.
.

退出登录清空session如何从前台到后台 (部分已试验)

前台页面
获取项目路径

<% String path = request.getContextPath(); %>

页面退出按钮

<a  href="javascript:;" onclick="logout()">安全退出</a>
<script>
  	//退出系统的方法
  	function logout(){
  		location.href="<%=path%>/logout.do";
  	}
</script>

后台代码

@RequestMapping("/logout")
public void logout(HttpServletRequest request,HttpServletResponse response){
	request.getSession().invalidate();
	try {
		request.getRequestDispatcher("/login.jsp").forward(request, response);
	} catch (Exception e) {
		e.printStackTrace();
	}
}

退出登录后让浏览器后退按钮失效

下面代码写在登录页面

下面这块代码已试验。好用

<script type="text/javascript">
$(function(){
		  if(window.history && window.history.pushState){
		  		$(window).on("popstate", function(){
			  		window.history.pushState("forward", null, "#");
			  		window.history.forward(1);
		  		});
		  }
		  window.history.pushState("forward", null, "#"); //在IE中必须得有这两行
		  window.history.forward(1);
		});
</script>

————————————————
版权声明:本文为CSDN博主「阁下大名」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/z19799100/article/details/87889852
.
.
.
.
.

asp.net中的窗体身份验证(完整篇之六:登出后不能通过后退回来面来的页面)

https://blog.csdn.net/smallfools/article/details/5630404

这个标题好长啊。

原本是没打算写下这一篇的,因为觉得身份验证到了登出之后,就算完成了。可是后来有博友提出疑问,登出之后,点击浏览器上的后退按钮,还是可以退回到登出前页面,起不到身份验证的作用。

事实上,就算使用后退按钮回到原来的页面,也只能看看页面内容,而不能对网页进行操作。一但进行操作的话,还是会需要重新登录的。

也许,有些朋友对页面的安全性要求比较高,连看都不想让人家看到。那这要怎么办?

这要从浏览器的缓存说起了。在N久以前,网络的宽带慢的是很慢很慢,所以,浏览器都有一个叫做“缓存”的功能。当你浏览了网页之后,就会把这个网页先缓存到本地计算机中,等你下一次再访问该网页时,浏览器会将缓存到本机计算机中的内容与服务器上的内容进行比较,如果没有更新,就不从服务器上读取网页,而是直接显示本地计算机中缓存的内容。这样做有两个好处,第一、客户端可以快速打开网页,节省等待的时间;第二、减少服务器压力。

所以,这个功能就一直保留了下来,直到今天、明天或者后天。

如果想不让浏览器缓存网页,最简单的方法就是使用HTML代码来实现,如以下代码所示。

<meta http-equiv="Cache-Control" content="no-cache" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="-1" />

以上代码应该放在和之间,第一句是HTTP 1.1标准中支持的,让浏览器不缓存网页内容;第二句是HTTP 1.0标准中支持的,让浏览器不缓存网页内容。因为不知道用户浏览器支持什么标准,所以可以把两句都加上。第三句,指定是网页过期时间,一般来说content值都是指定的一个时间,在这个时间之前,浏览器会显示缓存中的内容,这个时间之后,才会从服务器中读取新内容。如果为0或负数,那么就说明浏览器永远都从服务器中读取网页内容。

根据我十年前写HTML的经验,这样写就完全没有问题了。可是没想到的是……测试结果让我大跌眼镜、IE8、chrome6、Opera10和FireFox3.5下的测试全部没通过,点击浏览器的后退,还是可以看到登出后的网页。

还好,我还有九年前编写ASP的经验,于是,在.CS文件中加入了以下代码:

 //禁止客户端缓存服务器上的网页
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中加上以下代码:

 Response.Cache.SetNoStore();

这回的测试结果还算满意,IE8、chrome6和FireFox3.5都通过测试,只有Opera10还是很顽强地从缓冲中读取网页内容。至于怎么让Opera浏览器也实现网页过期,目前我还没有找到方法。如果有哪位朋友知道的话,请告诉我,谢谢。

在做测试时,以上代码写在子目录的测试页里,测试方法为:先进入登录页面–>登录后进入测试页面–>进入登出页面–>单击浏览器的后退按钮回退到测试页面。

如果想在登出之后,使用后退按钮不能回退到任何一页,那么就可以在任何一个网页中加入以上代码。当然,还有一个简单的方法,在Global.asax文件中加入以下代码:

protected void Application_BeginRequest(Object sender, EventArgs e)
{
    HttpContext.Current.Response.Cache.SetNoStore();
}

最后,再建议一下,对于单个文件而言,最好在aspx文件中加上、在CS文件中将以上代码都加上,鬼才知道用户浏览器支持什么啊。还是宁多勿少吧。

原创不容易,转载请注明出处。

相关链接:

1、asp.net中的窗体身份验证(最简单篇)

2、asp.net中的窗体身份验证(分目录验证篇)

3、asp.net中的窗体身份验证(完整篇之一:创建asp.net的窗体身份验证方式)

4、asp.net中的窗体身份验证(完整篇之二:asp.net的窗体身份验证过程)

5、asp.net中的窗体身份验证(完整篇之三:用户登录页面)

6、asp.net中的窗体身份验证(完整篇之四:获得用户数据)

7、asp.net中的窗体身份验证(完整篇之五:退出登录)

8、asp.net中的窗体身份验证(完整篇之附录:web.config中相应节点详解)

9、asp.net中的窗体身份验证(不同的角色访问不同的目录)

10、asp.net中的窗体身份验证(验证HTML文件)

11、asp.net中的窗体身份验证(完整篇之六:登出后不能通过后退回来面来的页面)

本例的下载地址为:http://www.aspxfans.com/myBlogFile/窗体身份验证:退出登录(不能后退).rar 或 http://download.csdn.net/source/2402796

本例在VS2005中测试通过。

————————————————
版权声明:本文为CSDN博主「smallfools」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/smallfools/article/details/5630404

发布了36 篇原创文章 · 获赞 10 · 访问量 2834

猜你喜欢

转载自blog.csdn.net/VIP_CR/article/details/104540525