什么是Cookie
- 在java中,
Cookie
是来自于Servlet
规范中一个工具类,存在于Tomcat
提供servlet-api.jar
中 - Cookie存放当前用户的私人数据
Cookie原理
用户打开浏览器第一次(指每次重新打开浏览器的第一次,而非指历来第一次)向某个网站发送请求,请求到达服务端,服务端创建一个Cookie
存储与当前用户相关数据,然后将Cookie
写入到响应头响应给浏览器,浏览器收到响应之后,会将cookie存储在浏览器的缓存中,而后的每次浏览器请求这个网站,浏览器需要无条件的将这个网站之前响应的Cookie
写入到请求头发送给网站服务器,服务器就可以基于浏览器请求的Cookie
做一些事情,比如判断是不是同一个用户。
通过原理中的描述,我们大概能明白如下
Cookie
是服务端生成的,但是客户端也可以存储甚至修改
那么浏览器如何看到cookie
呢,按F12打开调试界面里面可以看到
服务端如何创建一个Cookie
Cookie cookie = new Cookie("name", "value");
//设置cookie有效期为一个月
cookie.setMaxAge(3600*24*30);
response.addCookie(cookie);
除了可以设置cookie的有效期外,cookie还可以设置如下
Cookie 的Path说明
通过上面的图片可以看到,cookie是有path
的。不同path
和不同的Domain
下的Cookie
是不一样的。
cookie的path字段服务端不是必须要设定的,如果没有设定path,同一个系统中在不同的请求路径中新增的cookie的path是不一样的。
例如:
在/page/index/index.html
中添加了一个cookie
,而在/page/demo/demo.html
取值会取不到,因为前者path
是/page/index/
,后者取值path
是/page/demo/
。而在解决办法就是在添加cookie
时指定path
为/page/
, 这时page目录下的所有页面都可以获取到。
cookie.setPath("/page/");
Cookie Java 增删改查 Api
req和res指
HttpServletRequest req, HttpServletResponse res
增
Cookie cookie = new Cookie("name", "value");
res.addCookie(cookie);
删
Cookie[] cookies = req.getCookies();
for (int i = 0; i < cookies.length; i++) {
Cookie cookie = cookies[i];
if("name".equals(cookie.getName())){
cookie.setMaxAge(0);
}
}
改
重新增加一遍,Cookie中同名的会被替换
查
Cookie[] cookies = req.getCookies();
for (int i = 0; i < cookies.length; i++) {
Cookie cookie = cookies[i];
if("name".equals(cookie.getName())){
browserType = cookie.getValue();
}
}