Cookie
简介:
服务器保存在浏览器上的一段信息,主要用于区分不同的(浏览器)用户。
工作原理:
- 浏览器发送请求
- 服务器创建Cookie对象,该对象会携带用户信息,服务器将Cookie对象响应给浏览器
- 以后浏览器每次请求服务器时都会携带该Cookie对象,
- 服务器会根据不同的Cookie区分不同的浏览器端。
Cookie的创建、获取、修改:
创建:
Cookie cookie = new Cookie(String name,String value);
response.setCookie(cookie);
获取:
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
System.out.println(cookie.getName()+": "+cookie.getValue());
}
修改:创建个新的就好,不用修改
Cookie的有效性问题:
有效时间问题:
1.默认有效时间为当前会话,即当前浏览器的打开,直到关闭为当前会话
2.持久化Cookie:setMaxAge(long m) m=0:立即失效(Cookie响应之后立即失效)m>0 指定时间失效 m<0默认当前会话。
路径有效问题: 即某些Cookie只有在指定的路径下才可以有效
1.默认是当前WEB应用下
2.设置Cookie有效路径:setPath()
注意:一般设置Cookie的有效路径,均为当前项目下的某路径:cookie.setPath(request.getContextPath()+"/cookie_path.jsp");
Cookie缺陷
Cookie存放到浏览器中,相对不安全。
Cookie的value是String类型,相对不灵活。
Cookie过多,会浪费流量。
不同浏览器厂商,对Cookie数量有限制。
Session
Session是什么:
1.JSP的九大内置对象
2.session是一个域对象
3.session是一种在服务器端用来保存用户数据的一种技术 ,并且Session会话技术是基于Cookie来实现的。
所以它默认的作用于也是会话级别
工作原理:
1.第一次请求时:
浏览器发送请求
服务器创建Session对象 ,同时创建特殊的Cookie对象名称(name)为JSESSIONID 值(value)为session.getId(),并将Cookie对象返回个浏览器。
以后每次浏览器请求都会携带Cookie对象。
浏览器通过Cookie对象的JSESSIONID的value值获取Session对象,通过Session对象区分不同的用户
2.浏览器之后发送的请求:
不论Cookie不存在还是Session存不存在,都需要重新创建Session对象,然后再创建Cookie对象
若都存在通过cookie对象中的JSESSIONID获取value值找到Session对象,通过Session对象区别用户
Session的有效时间:
1.默认有效时间:30分钟
tomcat->web.xml->
<session-config>
<session-timeout>30</session-timeout>
</session-config>
手动设置有效时间
全局(单位:分钟)
当前web应用中的web.xml
<session-config>
<session-timeout>30</session-timeout>
</session-config>
局部 (单位:秒)
session.setMaxInactiveInterval(ss):设置当前session的最大非活动(空闲)时间,从最后一次访问开始计时。
ss>0:在指定时间内,没有访问session,session失效。
ss<=0:session永不失效
设置session失效
invalidate()
Session对象的释放:
- Session对象空闲时间达到了目标设置的最大值,自动释放
- Session对象被强制失效
- Web应用卸载
- 服务器进程停止
区别:
Cookie 是 web 服务器发送给浏览器的一块信息,浏览器会在本地一个文件中给每个 web 服务器存储 cookie。以后浏览器再给特定的 web 服务器发送请求时,同时会发送所有为该服务器存储的 cookie。
Session 是存储在 web 服务器端的一块信息。session 对象存储特定用户会话所需的属性及配置信息。当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。
Cookie 和session 的不同点:
1、无论客户端做怎样的设置,session 都能够正常工作。当客户端禁用 cookie 时将无法使用 cookie。
2、在存储的数据量方面:session 能够存储任意的java 对象,cookie 只能存储 String 类型的对象。
Cookie过期:
Cookie由浏览器管理,如果Cookie有过期时间,浏览器会在过期时间将其销毁。如果没有设置过期时间浏览器关闭后Cookie会过期
Session超时:
Session对象由服务器管理,服务器会计算Session对象的不活动时间,如果Session对象设置了超时时间,Session对象超过此时间会被销毁。如果没有设置默认30分钟会被销毁(服务器默认配置)