Cookie 和Session都是用来跟踪浏览器用户身份的会话方式,但是两者的应用场景不太一样。Cookie一般用来保存用户信息,Session主要作用是通过服务端记录用户的状态。
一、工作原理
1、Cookie
(1)浏览器端第一次发送请求到服务器端(2)服务器端创建Cookie,该Cookie中包含用户的信息,然后将该Cookie发送到浏览器端(3)浏览器端再次访问服务器端时会携带服务器端创建的Cookie(4)服务器端通过Cookie中携带的数据区分不同的用户
2、Session
(1)Session是基于Cookie实现的。浏览器端第一次发送请求到服务器端,服务器端创建一个Session,为了保证在一个会话的多次请求之间Session是同一个,同时会创建一个特殊的Cookie,其name为JSESSIONID的固定值,value为session对象的ID,然后再将该Cookie发送至浏览器端。(2)浏览器端发送第二次及以上的请求到服务器端,浏览器端访问服务器端时就会携带该name为JSESSIONID的Cookie对象(3)服务器端根据name为JSESSIONID的Cookie的value,去查询Session对象,从而区分不同用户。
注:对于第三步(3)
二、相同点与不同点
1、相同点:Cookie和Session都是来完成一次内多次请求间的数据共享
2、不同点存储方式:Cookie是将数据存储在客户端,Session将数据存储在服务端安全:Cookie不安全,Session安全存储时间:Cookie可以长期储存,而Session默认储存30分钟数据大小:Cookie最大不超过3KB,而Session没有大小限制对于服务器性能:Cookie不占用服务器资源,Session需占用服务器资源
解释:关于Cookie的缺点,第一,因为Cookie这个数据是存在浏览器上、存在客户端上的,因为客户端是谁我们不知道,且客户端系统的安全程度也远远不如服务器,存在客户端的数据不是很安全,特别是比较隐私的,如密码等。第二,Cookie在很多请求中会把数据发送给服务器,每次访问服务器都发同样的数据,就会增加数据量,会对性能产生一定的影响。为了解决这些问题,引用了Session
三、Cookie和Session的使用
1、Cookie的使用
(1)设置Cookie返回给客户端
//cookie示例
@RequestMapping(path = "cookie/set", method = RequestMethod.GET)
@ResponseBody
public String setCookie(HttpServletResponse response) {
//创建cookie
Cookie cookie = new Cookie("code", CommunityUtil.generateUUID());
//设置cookie生效范围
cookie.setPath("community/alpha");
//设置cookie的生存时间
cookie.setMaxAge(60*10);
//发送cookie
response.addCookie(cookie);
return "set cookie";
}
<< · Back Index ·>>