zoukankan      html  css  js  c++  java
  • 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;
      }
    }

  • 相关阅读:
    python基础:映射和集合类型
    python基础:列表生成式和生成器
    python基础:名称空间与作用域
    http://www.cnblogs.com/fczjuever/archive/2013/04/05/3000680.html
    2016新年总结
    send()和recv()函数详解
    python基础:测量python代码的运行时间
    python函数与方法装饰器
    Python基础:11.2_函数调用
    MySQL学习笔记-数据库后台线程
  • 原文地址:https://www.cnblogs.com/zhuangwf/p/10806897.html
Copyright © 2011-2022 走看看