【Cookie和Session辨析】

简介: 【Cookie和Session辨析】

1.cookie

1.1什么是cookie

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

  1. 用途
  • 跟踪用户会话:网站可以使用 Cookie 来跟踪用户的会话状态,例如记录用户登录状态、购物车内容等。
  • 个性化设置:网站可以根据 Cookie 中的信息为用户提供个性化的体验,如语言偏好、主题选择等。
  1. 工作原理
  • 服务器通过 HTTP 响应头将 Cookie 发送给客户端,客户端浏览器接收到 Cookie 后会将其存储在本地。
  • 在后续的请求中,客户端浏览器会将之前存储的 Cookie 数据通过 HTTP 请求头发送回服务器。
  • 服务器可以根据接收到的 Cookie 数据来识别用户、获取用户状态等信息。
  1. 特点
  • Cookie 存储在客户端,对于服务器端来说是不可见的,因此可以用来存储一些客户端相关的信息。
  • 每个 Cookie 都有一个名称、值、域(作用域)、路径、过期时间等属性,这些属性决定了 Cookie 的使用范围和有效期限。
  1. 安全性
  • 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

2.什么是session(重点)

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

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

  1. 工作原理
  • 当用户第一次访问网站时,服务器会为该用户创建一个唯一的 Session ID,并将这个 Session ID 存储在客户端(通常通过 Cookie)。
  • 在后续的请求中,客户端会将 Session ID 发送回服务器,服务器根据 Session ID 来识别用户,并检索相应的会话数据。
  • 会话数据存储在服务器端的内存、数据库或其他持久化存储中,与 Cookie 不同,Session 数据不会暴露在客户端。
  1. 用途
  • 跟踪用户状态:Session 可以用来跟踪用户在网站上的状态,例如用户登录状态、购物车内容等。
  • 存储用户信息:可以将用户的个性化设置、权限信息等存储在 Session 中,以便于在用户会话期间使用。
  1. 特点
  • 安全性:相对于 Cookie,Session 更安全,因为会话数据存储在服务器端,客户端无法直接修改。
  • 生命周期:Session 的生命周期通常由服务器控制,可以设置会话超时时间,当用户一段时间内没有活动时,会话数据会被清除。
  1. 注意事项
  • Session 数据占用服务器资源,如果会话数据过多或者会话量过大,会增加服务器的负担,需要进行合理管理和优化。
  • 可以通过配置 Session 的存储方式、超时时间等参数来调整 Session 的行为,以满足实际需求。

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

2.1session原理图

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);
    }
}

//得到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();


相关文章
|
30天前
|
存储 自然语言处理 API
Session、cookie、token有什么区别?
Session、cookie、token有什么区别?
29 1
|
8天前
|
存储 前端开发 小程序
表白墙完善(数据库,前端,后端Servlet),再谈Cookie和Session。以及一个关于Cookie的练习小程序
表白墙完善(数据库,前端,后端Servlet),再谈Cookie和Session。以及一个关于Cookie的练习小程序
|
14天前
|
存储 Web App开发 安全
Cookie和session 及Web相关工具
Cookie和session 及Web相关工具
|
1天前
|
存储 编解码 应用服务中间件
会话跟踪技术(Session 以及Cookie)
会话跟踪技术(Session 以及Cookie)
|
7天前
|
中间件 数据库 Python
Django——会话.Cookie&Session
Django——会话.Cookie&Session
|
8天前
|
JSON 前端开发 Java
Spring第一课,了解IDEA里面的文件,回顾Cookie和Session,获取Session,Cookie,Header的方式
Spring第一课,了解IDEA里面的文件,回顾Cookie和Session,获取Session,Cookie,Header的方式
|
30天前
|
存储 安全 Java
JavaWeb中的Session和Cookie
本文介绍了JavaWeb中的会话跟踪技术,主要讨论了Cookie和Session的概念、用途、设置与获取方法以及生命周期。Cookie是客户端技术,用于在用户浏览器中存储信息,通常用于保持用户登录状态,有效期可设置。Session则保存在服务器端,用于跟踪用户状态,例如登录信息,生命周期可通过设置最大不活动时间控制。两者之间的主要区别在于数据存储位置和安全性,Cookie数据在客户端,可能存在安全风险,而Session数据在服务器端,相对较安全但会占用服务器资源。
|
30天前
|
存储 缓存 安全
【PHP开发专栏】PHP Cookie与Session管理
【4月更文挑战第30天】本文介绍了PHP中的Cookie和Session管理。Cookie是服务器发送至客户端的数据,用于维持会话状态,可使用`setcookie()`设置和`$_COOKIE`访问。Session数据存于服务器,更安全且能存储更多数据,通过`session_start()`启动,`$_SESSION`数组操作。根据需求选择Cookie(跨会话共享)或Session(单会话存储)。实战中常组合使用,如Cookie记住登录状态,Session处理购物车。理解两者原理和应用场景能提升Web开发技能。
|
30天前
|
存储 安全 前端开发
禁用Cookie后Session还能用吗?
禁用Cookie后Session还能用吗?
28 1
|
30天前
|
Java
Cookie和Session
Cookie和Session
25 0