• Javaweb Cookie 和 Session 详解


    Javaweb Cookie 和 Session 详解

    1.Cookie API

    获取客户端的Cookie信息:

    Cookie[] cookies = req.getCookies();
    
    • 1

    服务器给客户端响应一个Cookie:

    Cookie cookie = new Cookie("UID", "1232djsjd2389");
    resp.addCookie(cookie);
    
    • 1
    • 2

    服务端获取Cookie信息:(获取Cookie的键和值)

    for (Cookie cookie : cookies) {
        System.out.println(cookie.getName());
        System.out.println(cookie.getValue());
    }
    
    • 1
    • 2
    • 3
    • 4

    设置Cookie的有效期:(不设置有效期,默认关闭浏览器Cookie消失)

    Cookie UID = new Cookie("UID", "1232djsjd2389");
    UID.setMaxAge(24 * 60 * 60);
    resp.addCookie(cookie);
    
    • 1
    • 2
    • 3

    案例演示:

    设置Cookie并输入Cookie信息:(由于是第一次访问,所以不会显示键为UID的Cookie)

    Cookie UID = new Cookie("UID", "1232djsjd2389");
    resp.addCookie(UID);
    Cookie[] cookies = req.getCookies();
    for (Cookie cookie : cookies) {
        System.out.println(cookie.getName() + " " + cookie.getValue());
        // SL_G_WPT_TO zh-CN
        // SL_GWPT_Show_Hide_tmp undefined
        // SL_wptGlobTipTmp undefined
        // JSESSIONID AB808B8B5283B9AA7644D459D24B3DCE
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    再次访问路径,查看浏览器Cookie信息,发现了键为UID的Cookie信息:

    在这里插入图片描述

    Java - Cookie工作的原理是,服务器端其会在响应标头中添加Set-Cookie信息:

    在这里插入图片描述

    而客户端访问服务器端时,会在请求标头添加Cookie信息:

    在这里插入图片描述


    2.Session API

    使用session会话跟踪技术可以解决HTTP无状态(服务器无法判断两次请求是不是同一个客户端)的问题

    获取Session信息:

    HttpSession session = req.getSession();
    
    • 1

    Session保存作用域:

    HttpSession session = req.getSession();
    session.setAttribute("name", "dahezhiquan");
    
    • 1
    • 2

    获取作用域内容:

    HttpSession session = req.getSession();
    Object name = session.getAttribute("name");
    
    • 1
    • 2

    获取SessionID:

    HttpSession session = req.getSession();
    String id = session.getId();
    
    • 1
    • 2

    判断Session是不是新的:

    HttpSession session = req.getSession();
    boolean aNew = session.isNew();
    
    • 1
    • 2

    注销当前Session,强制使Session失效,浏览器会立马生成一个新的Session ID:

    session.invalidate();
    
    • 1

    获取session的创建时间,最近一次session的使用时间:

    session.getCreationTime()   --> 获取session的创建时间
    session.getLastAccessedTime()   --> 获取最近一次session的使用时间
    
    • 1
    • 2

    设置Session的失效时间:

    可以通过web.xml来设置Session的默认失效时间:(例如,设置默认Session失效时间为15分钟)

    <session-config>
        <session-timeout>15session-timeout>
    session-config>
    
    • 1
    • 2
    • 3
  • 相关阅读:
    黑盒不黑:跨端 C/C++ 库一键源码调试方案
    C#结合JS实现HtmlTable动态添加行并保存到数据库
    python数据结构与算法-03_链表
    解决docker报eeror: write unix /var/run/docker.sock->@ write:broken pipe
    微服务最强理论基础,堪称绝妙心法
    【Linux】Linux常用操作命令(二)
    Docker容器数据卷
    Synchronized 原 理
    React 18 使用 Context 深层传递参数
    pytorch代码实现之空间通道重组卷积SCConv
  • 原文地址:https://blog.csdn.net/Gherbirthday0916/article/details/127588470