先引入概念
cookie是什么:
cookie就是通过“set-cookie”为响应头和“cookie”为请求头将会话中产生的数据保存在客户端的一种机制,是客户端技术。
cookie的工作原理:
简单来说,客户端第一次向服务器发送请求,服务器保存所需的数据,通过创建一个cookie,以“set-cookie”为响应头发送给浏览器,浏览器会以cookie形式保存在浏览器内部。当客户端再次访问服务器时,每次都会带有“cookie”请求头(里面带有cookie保存的信息),服务器能获取到上次会话保存在浏览器的cookie信息。
cookie的生命周期:
在服务器对创建的cookie,默认不做任何设置情况下,浏览器保存的cookie会存入“浏览器内存中”,所以,当我们关掉浏览器后,浏览器中的cookie,会被释放掉。所以我们再打开浏览器访问服务器时,服务器拿不到原先的cookie信息,把浏览器当作是第一次访问。
同时,这样之前服务器给这个浏览器“专属创建服务”的Session实例也就找不到了,因为服务器是根据之前保存在浏览器cookie来找到服务器中与该浏览器所对应的Session是哪一个的。(session是什么,可看下一篇)
怎么创建一个cookie:
Cookie cookie = new Cookie("time","");
response.addCookie(cookie);
更改cookie的生命周期
在创建cookie后,通过cookie.setMaxAge(60),就可以让存活60秒。与默认不做操作的区别在于(重点):当对cookie设置了存活时间后,cookie会被浏览器存入硬盘中,所以,关闭浏览器后,cookie依然能存活。代码如下:
Cookie cookie = new Cookie("time","");
// >>设置Cookie的存活时间(1小时,单位是秒)
cookie.setMaxAge(60 * 60);
response.addCookie(cookie);
怎么删除cookie
Cookie cookie = new Cookie("time","");
// >>设置Cookie的存活时间0秒(不存活)
cookie.setMaxAge(0);
response.addCookie(cookie);
Cookie的存在意义
由于Http协议是无状态的,就是没有记忆,服务端无法分清哪些请求是同一个客户(未登录)的发的。通俗的说,以前的网站就是些纯展示的页面,而且是一请求就是整个页面的静态刷新。在后面有了动态加载页面技术后,无记忆状态已满足不了当时人们的需求,如添加购物车,在未登录时,我多次添加商品到购物车中,服务端却不知道是不是同一个人添加的,因为客户很多,没有记忆识别,无法分清归纳商品到客户自己的购物车。
所以,Cookie与Session就是为了解决Http协议无状态而创造出来的。当客户端第一次请求服务端时,服务端会创建一个对这个客户端的唯一标识,并以cookie文件的形式保存在客户端。这样后面客户端的请求,都会带有cookie的标识,服务端自动检测到cookie后,就知道是之前的哪一个客户端请求的了。