• 【Cookie和Session辨析】


    1.cookie

    标题

    1.1什么是cookie

    Cookie 是一种在客户端(通常是 Web 浏览器)和服务器之间传递信息的机制,用于在客户端存储少量的数据。它由服务器发送到客户端浏览器,然后浏览器会将这些数据存储在本地,并在后续的请求中将这些数据发送回服务器。

    1. 用途

      • 跟踪用户会话:网站可以使用 Cookie 来跟踪用户的会话状态,例如记录用户登录状态、购物车内容等。
      • 个性化设置:网站可以根据 Cookie 中的信息为用户提供个性化的体验,如语言偏好、主题选择等。
    2. 工作原理

      • 服务器通过 HTTP 响应头将 Cookie 发送给客户端,客户端浏览器接收到 Cookie 后会将其存储在本地。
      • 在后续的请求中,客户端浏览器会将之前存储的 Cookie 数据通过 HTTP 请求头发送回服务器。
      • 服务器可以根据接收到的 Cookie 数据来识别用户、获取用户状态等信息。
    3. 特点

      • Cookie 存储在客户端,对于服务器端来说是不可见的,因此可以用来存储一些客户端相关的信息。
      • 每个 Cookie 都有一个名称、值、域(作用域)、路径、过期时间等属性,这些属性决定了 Cookie 的使用范围和有效期限。
    4. 安全性

      • Cookie 中的信息在客户端和服务器之间进行传输时是明文的,因此一些敏感信息不应该直接存储在 Cookie 中。
      • 为了加强安全性,可以使用加密技术对 Cookie 中的信息进行加密处理,或者采用安全标记(secure flag)和 HttpOnly 标记来增强安全性。

    Cookie 是一种在客户端和服务器之间传递信息的简单而有效的机制,它在 Web 开发中被广泛应用于用户状态跟踪、个性化设置等方面。

    1.2cookie原理图

    在这里插入图片描述

    Cookie[] cookies = req.getCookies(); //获得Cookie
    cookie.getName(); //获得cookie中的key
    cookie.getValue(); //获得cookie中的vlaue
    new Cookie("lastLoginTime", System.currentTimeMillis()+""); //新建一个cookie
    cookie.setMaxAge(24*60*60); //设置cookie的有效期
    resp.addCookie(cookie); //响应给客户端一个cookie
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.什么是session(重点)

    Session(会话)是在 Web 开发中用来跟踪用户状态和信息的一种机制。Session 是在服务器端维护的,用于存储特定用户会话期间的数据,通常以键值对的形式存储。每个用户访问网站时都会生成一个唯一的会话标识符(Session ID),用来标识该用户的会话数据。

    以下是关于 Session 的一些重要信息:

    1. 工作原理

      • 当用户第一次访问网站时,服务器会为该用户创建一个唯一的 Session ID,并将这个 Session ID 存储在客户端(通常通过 Cookie)。
      • 在后续的请求中,客户端会将 Session ID 发送回服务器,服务器根据 Session ID 来识别用户,并检索相应的会话数据。
      • 会话数据存储在服务器端的内存、数据库或其他持久化存储中,与 Cookie 不同,Session 数据不会暴露在客户端。
    2. 用途

      • 跟踪用户状态:Session 可以用来跟踪用户在网站上的状态,例如用户登录状态、购物车内容等。
      • 存储用户信息:可以将用户的个性化设置、权限信息等存储在 Session 中,以便于在用户会话期间使用。
    3. 特点

      • 安全性:相对于 Cookie,Session 更安全,因为会话数据存储在服务器端,客户端无法直接修改。
      • 生命周期:Session 的生命周期通常由服务器控制,可以设置会话超时时间,当用户一段时间内没有活动时,会话数据会被清除。
    4. 注意事项

      • Session 数据占用服务器资源,如果会话数据过多或者会话量过大,会增加服务器的负担,需要进行合理管理和优化。
      • 可以通过配置 Session 的存储方式、超时时间等参数来调整 Session 的行为,以满足实际需求。

    Session 是一种在服务器端维护的用户会话机制,用于存储用户状态和信息,提供了一种安全可靠的方式来跟踪用户在网站上的操作和状态。

    2.1session原理图

    session

    2.3具体使用

    package com.kuang.servlet;
    
    import com.kuang.pojo.Person;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.*;
    import java.io.IOException;
    
    public class SessionDemo01 extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            
            //解决乱码问题
            req.setCharacterEncoding("UTF-8");
            resp.setCharacterEncoding("UTF-8");
            resp.setContentType("text/html;charset=utf-8");
            
            //得到Session
            HttpSession session = req.getSession();
            //给Session中存东西
            session.setAttribute("name",new Person("秦疆",1));
            //获取Session的ID
            String sessionId = session.getId();
    
            //判断Session是不是新创建
            if (session.isNew()){
                resp.getWriter().write("session创建成功,ID:"+sessionId);
            }else {
                resp.getWriter().write("session以及在服务器中存在了,ID:"+sessionId);
            }
    
            //Session创建的时候做了什么事情;
    //        Cookie cookie = new Cookie("JSESSIONID",sessionId);
    //        resp.addCookie(cookie);
    
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    //得到Session
    HttpSession session = req.getSession();
    
    Person person = (Person) session.getAttribute("name");
    
    System.out.println(person.toString());
    
    HttpSession session = req.getSession();
    session.removeAttribute("name");
    //手动注销Session
    session.invalidate();
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
  • 相关阅读:
    ensp基础命令大全(华为设备命令)
    记升级springboot1.X 到springboot2.3.5踩的坑
    容联七陌助力鱼跃医疗升级智能联络中心,让客户服务更“鱼跃”
    LeetCode 88. 合并两个有序数组
    CSS介绍
    Chrome 浏览器经常卡死问题解决
    类的比较大小(Comparable -> compareTo(类自己实现接口),Comparator -> compare(新建一个类作为比较器))
    【面试经典150 | 哈希表】同构字符串
    PostCSS概述
    网站使用谷歌登录 oauth java nuxt auth
  • 原文地址:https://blog.csdn.net/qq_73918355/article/details/136721274