欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

cookie,session会话对象,application扫扫盲之你的信息怎么泄露的

程序员文章站 2022-07-13 10:30:41
...

                    小甜饼cookie是干什么的呢,首先它是由网络服务器生成,并发送给浏览器,小cookie可以记录用户名和密码,跟踪重复的用户,就像你吃下的小甜饼中有元素标记一样,会一直跟踪你,这时候你的信息会以key/value形式存在客户端的指定目录。

                   cookie地方法getcookies()可以获取到所有的cookie对象集合,然后对象的getName可以获得指定名称的cookie,getValue可以获取到cookie对象的值,我们将它们发送至客户端使用response对象的addCookie。这时候我们做一个小小实验,看浏览器是否能捕捉到是不是同一个用户上线,避免每次登陆都要输入密码,或者无法识别同一用户,已让人家蒙混过关。

                

<%
	Cookie[] cookies = request.getCookies();	//从request中获得Cookie对象的集合
	String user = "";								//登录用户
	String date = "";								//注册的时间
	if (cookies != null) {
		for (int i = 0; i < cookies.length; i++) {		//遍历cookie对象的集合
			//如果cookie对象的名称为mrCookie
			if (cookies[i].getName().equals("mrCookie")) {
				//获取用户名
				user = URLDecoder.decode(cookies[i].getValue().split("#")[0]);						date = cookies[i].getValue().split("#")[1];			//获取注册时间
			}
		}
	}
	if ("".equals(user) && "".equals(date)) {					//如果没有注册
%>

 这里就是创建index.jsp用于遍历cookies,如果存在,则输出再次光临,如果不是输入初次光临则,跳入deal.jsp向cookie写入注册信息。

<body>
<%
request.setCharacterEncoding("UTF-8");				//设置请求的编译为UTF-8
String user=URLEncoder.encode(request.getParameter("user"),"UTF-8");//获取用户名
Cookie cookie = new Cookie("mrCookie", user+"#"+new java.util.Date().toLocaleString());//创建并实例化cookie对象
cookie.setMaxAge(60*60*24*30);							//设置cookie有效期30天
response.addCookie(cookie);							//保存cookie
%>

 

我们看下这段代码,将用户user名存入cookie,并且实现保存多少天的功能,这就是我们平时登录一个网站时,一个浏览器提醒你是否要保存用户名和密码,以方便于下次登录,当然像淘宝网等也是这样,在你的浏览器一打开就是你的登录名,当然你的密码过了一段时间失效了,这就是以上代码的cookie.setMaxAge(60*60*24*30); 60秒=一分钟   60分钟=1小时,24小时=1天,30天=1个月,我们程序就是为了保存一个月的用户名,之后你在同一个浏览器登录都是再次登录的界面。


cookie,session会话对象,application扫扫盲之你的信息怎么泄露的
            
    
    博客分类: Java  Web cookiesessionapplication信息泄露 
还没做到怎么退出账户,所以要有一个月都在这个页面页了。当你不设置销毁时间时,默认浏览器关闭就销毁cookie。session和cookie一定区别是cookie是保存在客户端,session是保存在服务器端,当然sessionid是保存在客户端,对session不知道的我们往下看。

 

Session

之所以叫会话,我们可以做一个想象,打电话,只要不挂断电话双方交谈就会一直持续下去,但是在网络中,HTTP是一种无状态协议,一次请求连接一次结束,客户端请求与服务器合作,服务器接受返回响应,然后,就没有然后了,他们的合作到此为止,服务器才不会去保存相关用户信息,服务器管的是大部分自己的资源。这样为了弥补这样的缺点衍生了session,用户在肆意的跳转web页面时保存用户状态,使得整个用户会话一直保存下去,但是在会话中客户端长时间不向服务器发出请求,tomcat服务器是等待30分钟,session对象就会自动消失,这里可以通过编写程序定时发送请求,这里讲一个安全性问题:

在一个有密码保护的web应用中,正确处理用户退出过程并不仅仅只需调用httpsessioninvalidate()方法。现在大部分浏览器 上都有后退和前进按钮,允许用户后退或前进到一个页面。就像我经常进入付款页面然后发现我前面订单下错了了,于是点后退按钮,退回到我原来界面,这时候我之前填写的信息还在,这是session在起作用,这时候如果我付款完闭,退出账户,则页面转到登录界面,但是没有关闭浏览器,离开这个公用电脑,另

一个用户使用电脑时点击后退按钮,则不应该再出现我之前的信息,如果出现我应该要很担心我的信息安全问题,事实上,很多web应用为了安全则强制用户关闭浏览器,我记得以前有家网上银行就是这么做的,首先不能直接关闭页面,要退出账户,然后关闭浏

览器。

   一个比较好理解的是我之前参加了很多次机试,老师再三要求答完一个页面的题记得点保存再按下一页,也就是需要用户点击保存才会有session来保存你的数据,当然这种情况下也有小伙伴被坑的忘记点保存,之后只好在最后几秒,秒选凭记忆,真正好的机试系统应该能保证在机器断电情况下,换一台电脑继续答题,因为我实在见多了很多小伙伴踢掉了考场的电脑的电源,然后又没保存黯然离场。所以我想说的是真正的web应用要考虑到各方面因素,既要考虑到保存用户信息,也要及时销毁用户信息避免消息泄露,这就是项目和产品的一个区别,产品更要去为用户考虑。

所以及时手动销毁session也是必要的,而不是等到session失效,session对象有一个session.invalidate()来销毁对象,销毁后再次调用这个对象,就会报异常。

 

接下来我们要区别一下application应用对象:

这个对象用于保存应用程序中所有公用数据,服务器启动时自动创建,服务器停止时自动销毁,所有用户都可以共享application,与session相比,application是公有,这个其实有点像我们定义java  的private  和public,application生命周期更长,类似于系统中的全局变量。

在web应用中,用到application最多的是网页计数器或者聊天室,我们进入聊天室显示此时在线用户多少人就是利用application对象。

 

通常我们用360清楚网页的缓存时候会看到清楚cookie信息,这个大家可以注意一下,手机端缓存也是一样的存在客户端的cookie,我们会发现偶尔app会要求重新登录,这是cookie已经失效,另一个方法就是进设置对应用程序清除缓存,这时候你也需要重新登录,登陆后保存在服务器端的session会把数据更新到app上。

体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。

当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识

(称为session id),如果已包含则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来

使用(检索不到,会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相

关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应

中返回给客户端保存。保存这个session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给

服务器。一般这个cookie的名字都是类似于SEEESIONID。但cookie可以被人为的禁止,则必须有其他机制以便在cookie被禁止时

仍然能够把session id传递回服务器。

。但cookie可以被人为的禁止,则必须有其他机制以便在cookie被禁止时

仍然能够把session id传递回服务器。

经常被使用的一种技术叫做URL重写,就是把session id直接附加在URL路径的后面。还有一种技术叫做表单隐藏字段。就是服务器

会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。

 

 

  • cookie,session会话对象,application扫扫盲之你的信息怎么泄露的
            
    
    博客分类: Java  Web cookiesessionapplication信息泄露 
  • 大小: 7 KB