zoukankan      html  css  js  c++  java
  • 细谈会话管理-----Cookie和Session

    一、怎么定义一次会话?

    我们打开我们的浏览器,我们中间访问很多网页,直到我们关闭浏览器,就意味着会话结束。所以一次会话就是打开浏览器到关闭浏览器这个过程

    二、会话管理到底都管理什么?

    管理浏览器端和服务器端之间会话过程中产生的会话数据。

    三、Cookie技术和Session技术的主要区别在于何处?

    • Cookie技术:会话数据保存在浏览器端
    • Session技术:会话数据保存在服务器端

    四、细说Cookie技术篇

    4.1、Cookie类的学习:

    1、构造Cookie对象

    Cookie(java.lang.String name, java.lang.String value) 

    2、设置Cookie

    void setPath(java.lang.String uri)   :设置cookie的有效访问路径
    void setMaxAge(int expiry) : 设置cookie的有效时间
    void setValue(java.lang.String newValue) :设置cookie的值

    3、发送cookie到浏览器端保存

    void response.addCookie(Cookie cookie)  : 发送cookie

    4、服务器端接收cookie

    Cookie[] request.getCookies()  : 接收cookie

    4.2、Cookie原理

    1、服务器创建cookie对象,把会话数据存储到cookie对象中。

     new Cookie("name","value");

    2、服务器发送cookie信息到浏览器

     response.addCookie(cookie);

    举例: set-cookie: name=eric  (隐藏发送了一个set-cookie名称的响应头)

    3、浏览器得到服务器发送的cookie,然后保存在浏览器端。

    4、浏览器在下次访问服务器时,会带着cookie信息

        举例: cookie: name=eric  (隐藏带着一个叫cookie名称的请求头)

    5、服务器接收到浏览器带来的cookie信息

     request.getCookies();

    4.3 Cookie的一些细节

    1、void setPath(java.lang.String uri):设置cookie的有效访问路径。有效路径指的是cookie的有效路径保存在哪里,那么浏览器在有效路径下访问服务器时就会带着cookie信息,否则不带cookie信息。

    2、void setMaxAge(int expiry) : 设置cookie的有效时间。

    • 正整数:表示cookie数据保存浏览器的缓存目录(硬盘中),数值表示保存的时间。
    • 负整数:表示cookie数据保存浏览器的内存中。浏览器关闭cookie就丢失了!!
    • 零:表示删除同名的cookie数据

    3、Cookie数据类型只能保存非中文字符串类型的。可以保存多个cookie,但是浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。

    五、细说Session技术篇

    HttpSession session = request.getSession();

    5.1、代码解读:

    1、第一次访问创建session对象,给session对象分配一个唯一的ID,叫做JSESSIONID。

    new HttpSession();

    2、把JSESSIONID作为Cookie的值发送给浏览器保存

    Cookie cookie=new Cookie("JSESSIONID",sessionID);
    response.addCookie(cookie);

    3、第二次访问的时候,浏览器带着JSESSIONID的cookie访问服务器

    4、服务器得到JSESSIONID,在服务器的内存中搜索是否存放对应编号的session对象

    if(找到){
            return map.get(sessionID);
        }
    <String,HttpSession>]
    
    <"s001", s1>
    <"s001,"s2>

    5、如果找到对应编号的session对象,直接放回对象

    6、如果找不到对应编号的session对象,创建新的session对象继续走流程1.

    5.2、Session细节

    1、java.lang.String getId()  : 得到session编号

    2、两个getSession方法:

    getSession(true) / getSession()  : 创建或得到session对象。没有匹配的session编号,自动创 建新的session对象。

    getSession(false):  得到session对象。没有匹配的session编号,返回null

    3、void setMaxInactiveInterval(int interval): 设置session的有效时间

    session对象销毁时间:

      3.1 默认情况30分服务器自动回收

      3.2 修改session回收时间

      3.3 全局修改session有效时间

      3.4.手动销毁session对象

      void invalidate()     : 销毁session对象

     修改session全局有效时间:分钟 -->
    <session-config>
        <session-timeout>1</session-timeout>
    </session-config>

    4、如何避免浏览器的JSESSIONIDcookie随着浏览器关闭而丢失的问题

    /*
      * 手动发送一个硬盘保存的cookie给浏览器
     */
    Cookie c = new Cookie("JSESSIONID",session.getId());
    c.setMaxAge(60*60);
    response.addCookie(c);
  • 相关阅读:
    Samba 4.0 RC3 发布
    SymmetricDS 3.1.7 发布,数据同步和复制
    Express.js 3.0 发布,Node.js 的高性能封装
    GIFLIB 5.0.1 发布,C语言的GIF处理库
    jQuery UI 1.9.1 发布
    SVN Access Manager 0.5.5.14 发布 SVN 管理工具
    DynamicReports 3.0.3 发布 Java 报表工具
    HttpComponents HttpClient 4.2.2 GA 发布
    AppCan 2.0 正式发布,推移动应用云服务
    Ruby 2.0 的新功能已经冻结
  • 原文地址:https://www.cnblogs.com/lyjs/p/5057035.html
Copyright © 2011-2022 走看看