天天看点

会话跟踪技术:cookie 和 session

http协议是无状态协议,当用户发送一次请求之后,本次会话就结束了,下次再发送请求的时候,就需要服务器来确认来访请求的身份是属于哪个会话的,常用的2种会话跟踪技术就是Cookie和Session,下面就这2种的用法总结一下。

Cookie:

cookie是存储在浏览器上,为同一用户的不同请求之间的数据共享提供支持,要使用cookie,首先要在服务端进行设置,然后返回给客户端保存,在之后的请求中,会携带cookie数据,服务器根据cookie中的信息确认这个身份是否正确。

使用过程:

1、新建一个cookie对象:Cookie  coo = new Cookie(key,value);

2、设置cookie属性:coo.setMaxAge(int Seconds),设置过期属性,在该时间范围内会自动携带,此时cookie保存在硬盘上;coo.setPath(uri),设置URI信息,访问该URI时候才会携带cookie信息;

3、将cookie添加到响应中返回给浏览器:resp.addCookie(coo);

4、解析cookie :req.getCookies() 返回cookie数组,遍历解析

注意:

     在未清除浏览器缓存的时候,cookie保存之后,在下次发送其他请求时,会自动携带cookie信息;如果设置了生效URI,会在指定的URI使用cookie,其他的不会携带;当浏览器关闭之后,重新打开访问时,设置了过期时间的cookie还在,没有设置的已经不再了,由此说明:未设置过期的cookie是存在于浏览器的运行内存中的,设置之后,存在于硬盘上的;

    在清除浏览器的缓存后,不管是否设置过期时间,都会被清除cookie;

5、cookie 可以设置跨域共享:coo.setDomain(".baidu.com"); 设置之后,即可在以baidu.com为结尾的网址下进行cookie共享;

6、cookie设置有效路径:coo.setPath("/test");设置后,在/test路径下的页面才有cookie权限

应用:用户登录后,将特定的字符放在cookie中,下次请求进来,服务器根据cookie中的内容识别是否正确;如单点登录就是利用cookie进行的;

Session:

和cookie不同,session存放在服务器的内存中,对浏览器来说是透明的。session支持各种数据类型和实体类型,而cookie只支持简单的数据类型。对服务器的内存压力增大。

在Tomcat中,用户第一次请求的时候,服务器会生成一个JSESSIONID放在cookie中,下次请求时,根据cookie中的值判断是否和session.getId()相等来判断是否同一会话。

使用方法:

HttpSession sess = request.getSesson();

sess.setAttribute("username","zhangsan");

sess.setAttribute("uuid",1212121);

获取时:sess.getAttribute("uuid");