一、Cookie
Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客 户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务 器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。
Cookie的属性
- name: Cookie的名称,一旦创建,名称就不会修改
- value: Cookie的值,果值为Unicode字符,需要为字符编码。如果值为二进制数据,则需要使用Base64编码
- maxAge: Cookie失效时间,若为正数,则该Cookie在maxAge秒后失效,若为负数,则该Cookie为临时Cookie,关闭浏览器失效.若为0,则表示删除该Cookie.默认为-1
- secure: 该Cookie是否仅被使用安全协议传输.安全协议有HTTPS,SSL等,在网络上传输数据之前先将数据加密。默认为false
- path:该Cookie的使用路径。如果设置为”/web/”,则只有contextPath为”/web”的程序可以访问该Cookie。如果设置为”/”,则本域名下的contextPath都可以访问该Cookie。最后一个字符必须为”/”
- domain:可以访问该Cookie的域名。如果设置为”.google.com”,则所有以”google.com”结尾的域名都可以访问该Cookie。注意第一个字符必须为”.”
- comment:说明作用览器显示Cookie信息的时候显示该说明
- version:该Cookie使用的版本号。0表示遵循Netscape的Cookie规范,1表示遵循W3C的RFC 2109规范
二、Session
Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,这就是Session,在Session生成的同时,服务端会同时生成一个JSESSIONID的给客户端,客户端浏览器再次访问时只需携带JSESSIONID(Cookie形式或URL地址重写),就能找到对应的Session并从中查找该客户的状态。
Session保存在服务器端。为了获得更高的存取速度,服务器一般把Session放在内存里。每个用户都会有一个独立的Session,为防止大量用户访问导致内存溢出,Session里的信息应该尽量精简。
注意:服务端自动生成的Cookie(JSESSIONID)的maxAge一般为-1,表示仅当前浏览器内有效,并且各浏览器窗口间不共享,关闭浏览器就会失效
Session的生命周期
Session在用户第一次访问服务器的时候自动创建。需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session。如果尚未生成Session,也可以使用request.getSession(true)强制生成Session。
Session的有效期
Session的超时时间为maxInactiveInterval属性,可以通过对应的getMaxInactiveInterval()获取,通过setMaxInactiveInterval(longinterval)修改。Session的超时时间也可以在web.xml中修改。另外,通过调用Session的invalidate()方法可以使Session失效。
<!--Web.xml中设置session失效时间(10分钟失效/默认30分钟)-->
<session-config>
<session-timeout>10</session-timeout>
</session-config>
每次用户访问,无论是否读写Session,服务器都会更新Session的最后访问时间,当Session最后访问时间超过了设置的超时时间,那么session就会自动失效。
注意:网上说设置session-timeout为0或负数让session永久保持有效,是否真能起作用不清楚,最稳妥的方式还是隔断时间发一次请求,激活session