美文网首页
[java]35、cookie_session

[java]35、cookie_session

作者: 史记_d5da | 来源:发表于2022-04-16 11:43 被阅读0次

    1、背景

    1、HTTP是一种”无状态“(stateless)的协议
    每次客户端访问网页时,客户端都会打开与Web服务器的单独连接。
    并且服务器不会自动保留之前客户端请求的任何记录。
    2、很多场景中,都有一下需求
    服务器能够识别出多个请求是否来自同一个客户端
    来自同一个客户端的多个请求之间共享数据
    3、以上需求可以使用会话跟踪技术来完成。在Java中,实现会话跟踪的常用方案是
    CookieSession

    2、Cookie

    1、Cookie是直接存储在浏览器本地一小串数据
    使用document.cookie访问Cookie
    修改Cookie时,只会修改其中对应keyCookie
    name=value必须被编码(encodeURIComponent
    一个Cookie最大4kb,每个网站最多有20+个左右的Cookie(具体由浏览器决定)
    2、WindowsChrome浏览器的Cookie
    存放的位置:C:\Users\用户名\AppData\Local|Google\Chrome\User Data\Default\Cookies
    使用SQLite数据库进行存储
    3、Cookie的有效期
    如果没有设置Cookie的过期时间,则当浏览器关闭时,Cookie就失效了
    expires:必须完全采用GMT时区的格式,可以使用date.toUTCString来获取
    例如:expires=Tue, 19 Jan 2038 03:11:11 GMT

    document.cookie = 'name=jack; expires='+ new Date().toUTCString();
    

    max-age:过期时间距离当前时间的秒数,例如:max-age=60

    document.cookie = 'name=jack; max-age=60';
    

    服务端接收Cookie

    Cookie[] cookies = request.getCookies();
    if (cookies == null) return;
    for (Cookie cookie : cookies) {
        System.out.println(cookie.getName() + "_" +cookie.getValue());
    }
    

    4、Cookie的作用域
    domainpath标识定义了Cookie的作用域,即Cookie应该发送给哪些URL
    domain:标志指定了哪些主机可以接受Cookie
    如果不指定,默认为当前文档的主机(不包含子域名);如果指定了domain,则一般包含子域名中(如:bbs.520it.com

    localhost:6666/a/test2
    Cookie cookie = new Cookie("name", "mj");
    response.addCookie(cookie);
    localhost:8080/a
    localhost:8080/b
    localhost:8888/a
    localhost:8888/b
    // 不设置path,则默认path=/content_path,默认请求主机:
    // localhost:8080/a、localhost:8080/a
    

    path:标识指定了主机下的哪些路径可以接受Cookie,子路径也会被匹配
    例如:设置path=/docs, 则以下地址都会匹配
    /docs
    /docs/one/
    /docs/one/img
    5、服务器设置Cookie
    Cookie通常是由Web服务器使用响应头Set-Cookie设置的
    关于max-age
    JavaScript中:如果设置为0或者负数,会立即删除Cookie
    Java中:如果设置为0,是立即删除Cookie;如果设置为负数,按照默认情况查处理

    Cookie cookie = new Cookie("name", "mj");
    response.addCookie(cookie);
    

    3、session

    1、getSession内部的原理
    检查客户端是否有发送一个叫做JSESSIONIDCookie
    如果没有
    创建一个新的Session对象,并且这个Session对象会有一个id
    这个Session对象会保留在服务器的内存中
    在响应的时候,会添加一个CookieJSESSIONID=Session对象的id)给客户端
    如果有
    返回idJSESSIONIDSession对象
    2、JSESSIONID
    默认情况下、当用户关闭浏览器时,Cookie中存储的JSESSIONID就会被销毁
    可以通过以下代码延长JSESSIONID在客户端的寿命

    Cookie cookie = new Cookie("JSESSIONID", request.getSession().getId());
    cookie.setMaxAge(3600);
    response.addCookie(cookie);
    

    3、Session的有效期
    Session的有效期默认是30分钟
    可以在web.xml中配置失效时间(单位是分钟)

    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>
    

    相关文章

      网友评论

          本文标题:[java]35、cookie_session

          本文链接:https://www.haomeiwen.com/subject/ffnxertx.html