cookie和seesion都是用于将浏览器与服务器之间多次交互过程当做一个整体来处理,维持多次交互,并且对多次交互所用到的数据进行管理的技术,也就是会话,解决会话跟踪的技术。
cookie
1.关于cookie
浏览器中我们见过的那个cookie就是这个东西,浏览器在访问服务器的时候,
当浏览器再次访问服务器的时候,会将这些数据以cookie消息头的方式发送给服务器。
cookie分为存在于浏览器进程的cookie和存在于硬盘的cookie。
2.cookie的使用
创建cookie:
Cookie c = new Cookie(String name,String value);
response.addCookie(c); 发送给客户端
查询cookie
//如果没有cookie,返回null
Cookie[] request.getCookies();
String cookie.getName();
String cookie.getValue(); 一个cookie中包含name和value。
session
1.关于session
session是一种维持会话的技术,同样可以存取数据。
客户向服务器发送请求,在服务器端由web服务器(tomcat),创建一个专属客户的session对象;每个session对象都可以存储客户端的各种数据;同时还包括一个唯一的标识(sessionID),tomcat同时会将这个sessionid发送给客户端的浏览器中(存在浏览器的进程cookie中,也可以自己编码设置再硬盘cookie中但没有意义,没有这样的需求),当浏览器再向服务器发请求是,浏览器会自动将cookie中的 sessionid发送给服务器,服务根据sessionid找到对应的session,这样也就保持了会话。
2.维持会话的条件(session)
1.客户端浏览器不能关闭。//客户端浏览器关闭之后session虽然还存在(没超时情况下),但sessionID是存在于浏览器的进程cookie中的,
所以关闭浏览器相当于浏览器进程结束了,那个cookie就不存在了,相应的sessionID也就找不到了,
那么再发请求服务器也收不到sessionID,也就维持不了会话了。但其实可以将保存sessionID的cookie设置保存到本地,这样关闭浏览器这个cookie也不会销毁,再打开浏览器还可以保持会话,但这样没有意义,没有需求。
2.session不超时
3.服务器不重启 //重启之后session就消失了。
3.获得session的方法
session是由服务器来创建的,我们只得获得,而不创建,获得的方法是
request.getSession();
4.session的常用方法;
getId():获得session的唯一标识
setAttribute(name,value):向session中存储一对值;
getAttribute(name):根据名取值;
getAttributeNames():获得所有属性名
5.设置session的超时时间可以通过两种方式
通过配置web.xml:
<session-config>
<session-timeout>1</session-timeout>
</session-config>
在代码中可以使用:session.setMaxInactiveInterval(60*60*2);
cookie和session的区别
(1)cookie是一种客户端的状态管理技术,将状态写在浏览器端,
而session是一种服务器端的状态管理技术,将状态写在web服务器上面。
(2) cookie有很多限制:可以被用户禁止,cookie能够保存的数据比较小(大约4k),而且保存的个数也有限制(300个左右),
cookie不安全,cookie只能保存字符串。
而session能够保存更多的数据,相对更安全,保存的数据类型更丰富。
session会将所有的状态写在服务器端,所以服务器的压力比较大,而cookie没有这个问题。
(3)Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中;
Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。