【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

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 {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//解决乱码问题req.setCharacterEncoding("UTF-8");resp.setCharacterEncoding("UTF-8");resp.setContentType("text/html;charset=utf-8");//得到SessionHttpSession session = req.getSession();//给Session中存东西session.setAttribute("name",new Person("秦疆",1));//获取Session的IDString 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);}@Overrideprotected 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();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/538853.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot+vue3打造企业级一体化SaaS系统

SpringBootvue3打造企业级一体化SaaS系统 简介:    全面提升前后端技术水平,独立完成全栈项目开发能力,快速进击全栈工程师,最终在面试中脱颖而出。整合后端主流技术(Spring Boot、物理数据库隔离、加载动态权限、多…

深入了解volatile、内存屏障与happens-before规则

1、编译器优化的重排序。编译器在不改变单线程程序语义的前提下,可以重新安排语句的执行顺序;2、指令级并行的重排序。现代处理器采用了指令级并行技术来将多条指令重叠执行。如果不存在数据依赖性,处理器可以改变语句对应机器指令的执行顺序…

【C++ 】stack 和 queue

1. 标准库中的stack stack 的介绍: 1. stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行 元素的插入与提取操作 2. stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其…

LabVIEW电磁阀特性测控系统

LabVIEW电磁阀特性测控系统 电磁阀作为自动化工程中的重要组成部分,其性能直接影响系统的稳定性和可靠性。设计一种基于LabVIEW的电磁阀特性测控系统,通过高精度数据采集和智能化控制技术,实现电磁阀流阻、响应时间及脉冲特性的准确测量和分…

接口的回调

接口是引用型变量 接口回调技术:把实现该接口的类的实例引用赋给接口变 量(存放对象的引用)→接口变量可调用被类重写的接口方法。 ★注意★:接口com无法调用类中非接口方法

MySQL基础---SQL语句2(WHERE、AND、OR、ORDER BY、COUNT)

1. WHERE 子句 1. 语法 WHERE 子句用于限定选择的标准 在 slelece、update、delete 语句中,皆可使用 WHERE 子句来限定选择的标准 -- 查询语句 select 列名称 form 表名称 where 列 运算符 值-- 更新语句 update 列名称 form 列新值 where 列 运算符 值-- 删除语句…

数据库中的数据

从数据库查到的数据,是这种JSON格式,建和值都是双引号包裹 [[{id: 21,name: why,password: e10adc3949ba59abbe56e057f20f883e,createAt: 2024-03-11T06:55:35.000Z,updateAt: 2024-03-11T06:55:35.000Z}],[id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,name VARCH…

3.2 RK3399项目开发实录-初次使用的环境搭建(物联技术666)

通过百度网盘分享的文件:嵌入式物联网单片… 链接:https://pan.baidu.com/s/1Zi9hj41p_dSskPOhIUnu9Q?pwd8qo1 提取码:8qo1 复制这段内容打开「百度网盘APP 即可获取」 1. 用户和密码 1.1. Ubuntu Desktop 系统 Ubuntu Desktop 系统开机启动后,自动登录…

图片或视频充当网页背景+过渡动画

这是目前的主页预览图。上一个版本带有学校logo,根据比赛规则,删掉了学校logo。 图片背景 也就是将图片作为背景。 这个需求产生的场景是:如果直接用img标签显示界面左上角的logo,那么鼠标右键是可以直接选中图片的&#xff0c…

DirectPV的故事

2020 年,MinIO 为基于 Kubernetes 的 MinIO 存储部署实施了直接持久卷 (DirectPV)。DirectPV 类似于 LocalPV,但动态预配。 在这篇文章中,我将介绍创建 DirectPV 的有趣设计决策。但在深入了解设计细节之前&#xff0c…

Logseq电脑端+安卓端同步gitee或github

文章目录 0.初衷1.电脑端1.1 新建仓库1.2 克隆项目,生成秘钥1.3 添加图谱,选择文件目录,我是原本就有笔记,所以会如下所示。1.4 下载脚本文件1.5赋权限 (windows可跳过)1.6 修改脚本命令1.7 logseq设置同步…

es 聚合操作(二)

书接上文,示例数据在上一篇,这里就不展示了 一、Pipeline Aggregation 支持对聚合分析的结果,再次进行聚合分析。 Pipeline 的分析结果会输出到原结果中,根据位置的不同,分为两类: Sibling - 结果和现有…