什么是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();
}
}
