1. Cookie
1.1 概述
服务器将某些数据发送到浏览器,然后再把数据临时存到用户电脑上 Cookie主要用于存储用户信息、用户习惯、用户操作等数据
1.2 作用
用户可以实现自动登录,可以记住登录的用户名和密码,方便下次简化登录 电子商务网站(购物),可以记录你曾经选择的商品,在结账时可以将选择商品调出来,然后付账 可以记录用户的访问习惯、网页停留的时间、喜欢什么样的商品、进行什么搜索,也是网络营销手段
1.3 工作原理
服务器把某些数据存放到响应头中的Cookie中 浏览器根据Cookie信息把数据临时存放到本地中 客户端发送请求时浏览器会把本地有效的Cookie数据发送给服务器 服务器获取Cookie信息
1.4 缺点
因为cookie保存在浏览器上,所以安全性低 可控性比较差,只能存放字符串,不能存放数组和对象 因为数据存放在头信息中,所以增加请求数据的负载 大多数的浏览器对cookie有4K的限制 Cookie可以被浏览器阻止
1.5 注意
1.6 添加Cookie
Cookie cookie= new Cookie ( "name" , "zhangsan" ) ;
response. addCookie ( cookie) ;
1.7 设置Cookie存储的有效时间
默认Cookie是存储在浏览器内存中,浏览器关闭后该Cookie也会失效 使用setMaxAge()
可以设置过期时间,单位:秒,Cookie会写入到客户端的文件中,Cookie过期跟浏览器是否关闭没有关系
cookie. setMaxAge ( 60 * 2 ) ;
1.8 设置目录有效性
setPath()
设置只有访问指定目录下的文件,请求时才会携带该Cookie、默认设置的目录是跟添加Cookie的文件同一个目录
cookie. setPath ( "/Web04" ) ;
cookie. setPath ( "/" ) ;
1.9 移除Cookie
同名用域名同目录有效性时间为0的Cookie进行覆盖就达到删除Cookie效果
Cookie cookie= new Cookie ( "name" , null ) ;
cookie. setMaxAge ( 0 ) ;
cookie. setPath ( "/" ) ;
response. addCookie ( cookie) ;
1.10 获取Cookie
String key= "name" ;
String value = "" ;
Cookie [ ] cookies = request. getCookies ( ) ;
for ( Cookie cookie : cookies) {
if ( cookie. getName ( ) . equals ( key) ) {
value = cookie. getValue ( ) ;
break ;
}
}
System . out. println ( value) ;
2. Session
2.1 概述
Session是一种会话技术; Session数据存在服务器端,相对于比较安全; Session是基于COOKIE的,如果COOKIE被禁用SESSION功能也会被影响 Session可以存储多个类型的数据; Session文件没有大小限制; sessionid默认是整个网站都能访问(即使没有设置cookie.setPath()
),所以session存储的数据跨request都有效
2.2 工作原理
把数据存放在服务器中,并把一个sessionid放到响应头Cookie中 浏览器把sessionid保存到本地中 客户端发送请求时浏览器会把本地有效的cookie中的sessionid发送给服务器 服务器根据sessionid查找存储的数据
2.3 注意
sessionid没有发送到服务器端或者服务器端存储的session被销毁都会导致session数据丢失,调用request.getSession()
会重新创建一个session
2.4 获取session和sessionid
HttpSession session= request. getSession ( ) ;
String sessionId1= request. getRequestedSessionId ( ) ;
String sessionId2= session. getId ( ) ;
2.5 域对象
session域存储的数据在session失效前可以被整个网站应用任何动态资源访问(跨请求丶跨资源)
session. setAttribute ( "name" , "zhangsan" ) ;
Object obj= session. getAttribute ( "name" ) ;
String name= obj== null ? null : ( String ) obj;
session. removeAttribute ( "name" ) ;
2.6 sessionid存储在客户端的有效时间
sessionid是存储在Cookie中的,所以也是默认关闭浏览器sessionid的Cookie会失效 通过设置JSESSIONID的Cookie的有效时间来把JSESSIONID存在到客户端的本地文件中
HttpSession session= request. getSession ( ) ;
Cookie cookie= new Cookie ( "JSESSIONID" , session. getId ( ) ) ;
cookie. setMaxAge ( 60 * 60 * 6 ) ;
response. addCookie ( cookie) ;
2.7 服务器端session定时销毁
默认连续30分钟该客户端没有发送请求到服务器端(不要求一定要调用session),则该session就会自动被销毁 可以在web.xml设置销毁session的连续空闲时间间隔
<web-app>
<session-config>
<!-- 设置销毁session的连续空闲时间间隔,单位是分钟 -->
<session-timeout>10</session-timeout>
</session-config>
</web-app>
2.8 手动销毁存储在服务器端的session
session. invalidate ( ) ;