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