javaWeb中的cookie
什么是会话?
简单来说:用户打开浏览器,连续进行多个操作,关闭浏览器,整个过程称为一个会话 !
在会话的过程中,会产生数据,需要一个对象来保存数据,该对象能针对每个会话独立保存数据,用什么对象呢?
request:request只是针对一次请求响应,显然不满足!
servletContext:servletContext是公共的,也是不行的!
cookie:保存用户数据到客户端浏览器中,满足要求!
Cookie的实现原理:
1、客户端提交会话数据到服务器,服务器选择在响应中保存cookie信息 在响应中添加头 set-Cookie : key=value
2、客户端接收set-Cookie后,将cookie信息 保存到浏览器中
3、客户端访问服务器端下一次请求,会自动携带之前保存cookie信息,在请求头中添加cookie:key=value
4、服务器端就可以通过 cookie请求头信息,获得cookie数据
服务器向客户端写cookie信息
1、cookie的创建
Cookie c = new Cookie(name,value); // 生成响应头信息 set-cookie: name=value,name=value,name=value…
* 对于value可以读取 getValue setValue
* 对于name 只读 getName
2、需要将cookie写到客户端
response.addCookie(c);
3、关于会话cookie和持久cookie
cookie写到浏览器端,默认保存在浏览器内存缓存区中(会话cookie),当关闭浏览器后,会话cookie信息就会删除
如果需要在关闭浏览器后,cookie信息还存在,将cookie信息持久化到硬盘上(持久cookie) —- 设置cookie的maxAge
4、path和domain 的设置 ,限制访问哪个站点或者哪个资源 携带cookie
domain 默认是域名,当前网站域名 .sina.cn、baidu.com
访问baidu,设置domain为.baidu.com ——— 第一方cookie
访问baidu,设置domain为.google.com ——— 第三方cookie
* 大多数浏览器 阻止第三方cookie
有效访问路径 path ,如果访问资源路径 和 cookie设置有效访问路径 不符合,请求中将不会携带cookie信息
例如cookie设置有效路径为: cookie.setPath(“/aaa”);
会生成响应信息为:Set-Cookie: last=1346038104734; Expires=Wed, 26-Sep-2012 03:28:24 GMT; Path=/aaa
访问资源路径 : http://localhost/day7/lastvisit 与 path:/aaa不符合 不会携带cookie
** 默认path路径 就是生成cookie访问路径
总结:
生成cookie的代码:
Cookie c = new Cookie(name,value);
c.setMaxAge(…);
c.setPath(…);
response.addCookie(c);
查找cookie的工具类
public static Cookie findCookie(Cookie[] cookies, String name) {
if (cookies == null) {
// cookie 就不存在
return null;
} else {
for (Cookie cookie : cookies) {
if (cookie.getName().equals(name)) {
// 找到
return cookie;
}
}
// 没找到
return null;
}
}
转载于//www.cnblogs.com/zhuangwf/p/10806897.html
还没有评论,来说两句吧...