zoukankan      html  css  js  c++  java
  • http会话技术:cookie和session

    会话技术

    会话:一个会话中包含多次请求和响应。

    一次会话:浏览器第一次给服务器资源发送请求、会话建立,直到一方断开为止。

    功能:在一次会话的范围内的多次请求间,共享数据

    方式:

    • 客户端会话技术:Cookie,数据保存在客户端
    • 服务器端会话技术:Session,数据保存在服务器

    Cookie

    快速入门

    1. 服务器(Servlet)创建cookie对象,绑定数据

      new Cookie(String name, String value)

    2. 服务器发送cookie对象(浏览器自动存储)

      resp.addCookie(cookie)

    3. 浏览器第二次访问服务器时,服务器会获取cookie对象,拿到数据

      Cookie[] req.getCookies()

    cookie原理

    cookie是存在请求头和响应头传递

    cookie细节

    1. 一次 可不可以发送多个cookie?
      • 可以,多创建几个cookie对象,添加就可以了。
    2. cookie在浏览器保存多长时间?
      • 默认情况下,浏览器关闭,cookie被销毁。
      • 持久化存储:
        • cookie.setMaxAge(正数) 存到硬盘xx秒;
        • cookie.setMaxAge(负数) 默认值;
        • cookie.setMaxAge(0) 删除cookie信息。
    3. cookie能不能存中文?
      • 在tomcat 8之前,不可以存储中文。
      • 在tomcat 8之后,可以存储中文,但是不支持特殊字符,需要URL编码:
        • 编码 str = URLEncoder.encode(str, "utf-8");
        • 解码 str = URLDecoder.decode(str, "utf-8");
    4. cookie数据共享范围?
      • 一个服务器,部署多个web项目之间,默认不能共享
      • 默认是设置 cookie.setPath("/当前虚拟路径")
      • 如果整个服务器 共享,可以设置为 :cookie.setPath("/")

    cookie特点

    1. cookie存储在客户端
    2. 单个cookie的大小限制在4kb,并且同一个域名下的总的cookie数量也有限制。
    3. cookie一般存储少量的不太敏感的数据
    4. 在不登录的情况下,完成服务器对客户端的身份识别。

    Session

    快速入门

    1. 存储session

      HttpSession session = req.getSession();
      session.setAttribute("msg", "hello");
      
    2. 获取session (另一个servlet文件)

      HttpSession session = req.getSession();
      Object msg = session.getAttribute("msg");
      System.out.println(msg);
      

    session原理

    session依赖cookie:

    1. 第一次创建session对象时;
    2. 服务器会创建一个cookie,cookie指向session;(JsessionID: xxx
    3. 第二次访问时,服务器会根据cookie信息,查找到session对象。

    session细节

    1. 当客户端关闭后,服务器不关闭,两次获取session是同一个吗?

      • 默认不是,如果需要,创建cookie,设置最大存储时间:

        HttpSession session = req.getSession();
        Cookie c = new Cookie("JSESSIONID", session.getId());
        c.setMaxAge(60*60);
        resp.addCookie(c);
        
    2. 当客户端不关闭,服务器关闭后,两次获取session是同一个吗?

      • 不是,因为创建了两次对象,地址不一样,但是tomcat自动完成以下工作:
        • session的钝化:在服务器关闭前,将session对象存储在硬盘上
        • session的活化:在服务器启动后,将session文件转化为对象
    3. session什么时候被销毁?

      • 服务器关闭
      • session对象调用invalidate()
      • session默认失效时间 30分钟
        • 修改tomcat配置文件tomcat/conf/web.xml 所有项目的父配置文件
        • 修改<session-timout>30</session-timeout>
        • 也可以在项目的web/WEB-INF/web.xml修改

    session特点

    session特点:

    1. 用于存储一次会话、多次请求的数据,存储在服务器
    2. 可以存储任意大小的数据

    session与cookie区别

    • session存储服务器端,cookie存储客户端
    • session数据安全,cookie相对不安全
    • session没有数据大小限制,cookie有数据大小限制
  • 相关阅读:
    【nodejs】使用Node.js实现REST Client调用REST API
    [Groovy] Groovy && JNI
    一些很实用的Maven Plugins
    秋天到了
    今天头好疼
    想起那个人的时候
    不知道标题
    生活让我懂得
    显示实现接口和实现接口
    Foreach原理
  • 原文地址:https://www.cnblogs.com/mingriyingying/p/13496192.html
Copyright © 2011-2022 走看看