zoukankan      html  css  js  c++  java
  • Cookie和Session

    会话技术:
      会话:双方的交流或者交互,计算机中也是,浏览器和服务器的交互称之为会话
    会话的生命周期:
      开始:
        浏览器访问服务器时会话开始
      结束:
        浏览器或者服务器一方中断时,会话结束
        由于服务器一般一直处于持续运行状态,会话结束一般是浏览器关闭引起的

    会话技术:交互过程中的数据存储技术
    会话中会产生一些数据,比如:注册页面客户录入的数据,访问服务器的时间,后台生成的验证码...

    数据怎么存储:
      A、最常见方案 ---- 数据库存储
      B、将数据存储到 Cookie ---- 数据由浏览器保存
      C、将数据存储到 session --- 数据由服务器保存 (和数据库的区别,没有实现持久化存储)

    Cookie
      浏览器中的存储形式为:
        站点(服务器硬件)项目(服务器所在程序)路径(具体的servlet)
      创建Cookie并发送到浏览器:
        Cookie c = new Cookie("键","值");
        response.addCookie(c);  //没有设置路径Cookie的路径就是Servlet路径
          底层封装:
            响应头:set-cookie 键=值
            浏览器进行保存:
              选项 ----> 隐私 ----> cookie 查看
            浏览器将Cookie携带到服务器:
            将Cookie存储到请求头
              键:cookie  
              值:不同的Cookie使用";"隔开
    Cookie使用:
      A、键重名时,后面的 Cookie 会覆盖前面的(当前阶段:Cookie 不能重名)
      B、获取 Cookie 的键和值
        getName()   getValue()
      C、Cookie的存活时间
        Cookie 默认存活至浏览器关闭 ----- Cookie 只在内存中
        setMaxAge(时间值秒数) --- 可以设置 Cookie的存活时间 ---- 浏览器关闭时,会将 Cookie 序列化到磁盘文件
          注意:
            1、Cookie 怎么删除?
              可以调用 setMaxAge(0)
            2、setMaxAge(负数) --- 和不设置一样,存活到会话结束
      Cookie的重名存储
        A:调用setPath实现,相同名称的Cookie如果path不同,那么可以重名存在
          Cookie.setPath("/day3701demo_cookie/a/b")
          必须要指定这个路径才能获取到当前的这个Cookie,同时也能获得父级的目录
        B:站点不同时,Cookie也可以重名
      Servlet路径与Cookie获取
        A:和Servlet同级的Cookie可以获取
        B:父级下面的Cookie也可以获取到
      Cookie的中文键值:
        创建:Cookie c = new Cookie(URLEncoder.encode("中","UTF-8"),URLEncoder.encode("国","UTF-8"));
        获取:键:URLDecoder.decode(c1.getName(),"UTF-8")
           值:URLDecoder.decode(c1.getValue(),"UTF-8")
      Cookie的限制:
        1、在浏览器中一个Cookie存储的数据不超过 4kb
        2、浏览器针对于一个服务器,最多支持 20 个cookie
        3、浏览器最多就支持 300 个Cookie

    Session:
      1、Session 使用流程
        A、第一次访问 Servlet ,调用 getSession 方法,这时会创建一个 Session 对象 ----- getSession --- 创建
          并生成一个 cookie,cookie 和 session 是关联的(有相同的ID)(此时的Cookie被隐藏)
        B、JSESSIONID 被发送到浏览器,浏览器保存
        C、再次访问时,取出JSESSIONID 传递到服务器
        D、服务器解析查找 对应的Session ---- getSession --- 获取已经存在的
        E、使用 Session
      2、session特点:
        A、session 可以实现不同Servlet之间数据的共享
        B、session 通过 Cookie 的ID 进行查找 cookie 的值刚好和 Session 对象的ID值一样
          session和ServletContext比较:
            ServletContext 不光在 Servlet 之间可以共享,对于每一个会话也是共享的
            session 在 servlet 之间共享,但是每一个会话都有自己的一个session
      3、session 使用语法
        A、获取Session ---- request.getSession()
        B、设置值 ---------- session.setAttribute("键",Object类型);
          获取值 ------------ session.getAttribute("键")
          删除 --------------session.removeAttribute("键");
      4、session 的生命周期
        A、创建
          第一次调用 getSession() 创建
          getSession() ---- 第一次访问创建
          getSession(true) - 第一次访问创建
          getSession(false)- 第一次访问不会创建对象,得到null
        B、使用

        C、消亡
          1、强制 Session 消亡 --- 调用invalidate() 方法
          2、使用Tomcat 默认实现让 session 自然消亡 ----- 浏览器超过 30分钟不使用 session ,那么tomcat 会干掉 session
          3、关闭服务器时,序列化 session ----- 正常关闭(客户端没有关闭)
            非正常关闭:session 不能序列化,丢失了(序列化之后重新开启服务器此次会话的数据继续使用,丢失了重新设置)
      5、session注意事项
        1、注意浏览器关闭时,一次会话结束,那么JSESSIONID 释放,这次会话对应的 Session ,下次访问不能获取到
        2、服务器的session 超过默认的30分钟,就可以销毁了
    作用域:
      ServletContext ---- 全局有效(不同的客户端访问的是同一个)
      session ----------- 不同servlet之间(不同的客户端访问会产生不同的session),一次会话中只有一个session
      request ----------- 只是在本次请求有效

    Session 和 Cookie
      1、存储位置不同
      2、存储的数据不同 cookie 字符串, session Object类型
      3、存储个数不同
      4、cookie 不安全,以文件方式存储在浏览器的对应的磁盘上
      5、cookie 和 session 比较 session 加大服务器端的压力,cookie 不存在这个问题
      6、浏览器禁用Cookie,session 必须结合URL重写

  • 相关阅读:
    单链表的相关操作
    R学习-- 数组和矩阵
    UIButton 设置圆角 边框颜色 点击回调方法
    【独立开发人员er Cocos2d-x实战 007】使用Cocos2dx UserDefault.xml
    聊一聊多源最短路径问题(仅仅有5行代码哦)
    Android cookies正确的更新方式
    Android IntentService的使用和源代码分析
    Android应用之——最新版本号SDK V2.4实现QQ第三方登录
    嵌套路由
    我自己用
  • 原文地址:https://www.cnblogs.com/chonglchong/p/6850891.html
Copyright © 2011-2022 走看看