Cookie和Session

目录

一、Cookie是什么?

二、Session是什么?

2.1 Session使用流程

三、Cookie 与 Session 的区别

四、核心方法

4.1 HttpServlet中关于Session的方法

4.2 HttpSession类中的方法

4.3 Cookie类中的方法


一、Cookie是什么?

Cookie是浏览器在本地存储数据的一种机制

  • Cookie是从服务器来的,服务器在响应中会带有Set-Cookie字段,通过这个字段就可以通过服务器将需要保存在本地的数据返回
  • 后续浏览器访问服务器的时候,就会把当前本地所有的Cookie都通过http请求带过去
  • 利用Cookie保存当前用户的登录状态

在Cookie中保存用户的身份标识,此时的身份标识如何分配,以及身份信息具体如何储存,这个就是Session机制所做的工作

二、Session是什么?

服务器在同一时刻收到的请求是很多的,服务器需要清楚的区分每个请求都属于哪个用户,就需要在服务器中记录每个用户令牌以及用户信息的对应关系。

会话的本质就是一个“哈希表”, 存储了一些键值对结构。key 就是令牌的 ID(token/sessionId),value 就是用户信息(用户信息可以根据需求灵活设计)

sessionId 是由服务器生成的一个 “唯一性字符串”, 从 session 机制的角度来看,这个唯一性字符串称为 "sessionId"。但是站在整个登录流程中看待,也可以把这个唯一性字符串称为 "token"。sessionId 和 token 就可以理解成是同一个东西的不同叫法(不同视角的叫法)

2.1 Session使用流程

  1. 当用户登陆的时候,服务器在 Session 中新增一个新记录,并把 sessionId / token 返回给客户端。(例如通过 HTTP 响应中的 Set-Cookie 字段返回)。
  2. 客户端后续再给服务器发送请求的时候,需要在请求中带上 sessionId/ token。(例如通过 HTTP 请求中的 Cookie 字段带上)。
  3. 服务器收到请求之后,根据请求中的 sessionId / token 在 Session 信息中获取到对应的用户信息,再进行后续操作。

    Servlet 的 Session 默认是保存在内存中的。如果重启服务器则 Session 数据就会丢失

三、Cookie 与 Session 的区别

  • Cookie 是客户端的机制,Session 是服务器端的机制。
  • Cookie 和 Session 经常会在一起配合使用,但是不是必须配合
  • 完全可以用 Cookie 来保存一些数据在客户端。这些数据不一定是用户身份信息,也不一定是 token / sessionId
  • Session 中的 token / sessionId 也不一定通过 Cookie / Set-Cookie 传递。

四、核心方法

4.1 HttpServlet中关于Session的方法

HttpServletRequest 类中的相关方法

方法描述
HttpSession
getSession()
在服务器中获取会话。参数如果为 true,当不存在会话时新建会话;参数如果
为 false,当不存在会话时返回 null
Cookie[]
getCookies()
返回一个数组就,包含客户端发送该请求的所有的 Cookie 对象。会自动把
Cookie 中的格式解析成键值对
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws Servlet// 在servlet中利用 HttpServletRequest获取到Session对象// 如果参数是true,当没有Session对象的时候就会主动创建,false则不会创建HttpSession session = req.getSession(true);// 利用创建好的session对象将用户信息存入session.setAttribute("user",user);}

HttpServletResponse 类中的相关方法

方法描述
void addCookie(Cookie cookie)把指定的 cookie 添加到响应中

4.2 HttpSession类中的方法

一个 HttpSession 对象里面包含多个键值对。我们可以往 HttpSession 中存任何我们需要的信息

方法描述
Object getAttribute(String
name)
该方法返回在该 session 会话中具有指定名称的对象,如果没
有指定名称的对象,则返回 null。
void setAttribute(String
name, Object value)
该方法使用指定的名称绑定一个对象到该 session 会话
boolean isNew()判定当前是否是新创建出的会话
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws Servlet// 在servlet中利用 HttpServletRequest获取到Session对象// 如果参数是true,当没有Session对象的时候就会主动创建,false则不会创建HttpSession session = req.getSession(true);// 利用创建好的session对象将用户信息存入,其中user是实体类session.setAttribute("user",user);// 取出用户信息session.getAttribute("user");}

4.3 Cookie类中的方法

每个 Cookie 对象就是一个键值对

方法描述
String getName()该方法返回 cookie 的名称。名称在创建后不能改变。(这个值是Set-Cooke 字段设置给浏览器的)
String getValue()该方法获取与 cookie 关联的值
void setValue(String
newValue)
该方法设置与 cookie 关联的值
  • HTTP 的 Cooke 字段中存储的实际上是多组键值对。每个键值对在 Servlet 中都对应了一个 Cookie对象。
  • 通过 HttpServletRequest.getCookies() 获取到请求中的一系列 Cookie 键值对
  • 通过 HttpServletResponse.addCookie() 可以向响应中添加新的 Cookie 键值对

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

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

相关文章

微宏科技基于 KubeSphere 的微服务架构实践

作者:尹珉,KubeSphere Ambassador、contributor,KubeSphere 社区用户委员会杭州站站长。 公司简介 杭州微宏科技有限公司于 2012 年成立,专注于业务流程管理和自动化(BPM&BPA)软件研发和解决方案供应商。创始团队毕业于浙江大…

NodeJs中使用JSONP和Cors实现跨域

跨域是为了解决浏览器请求域名,协议,端口不同的接口,相同的接口是不需要实现跨域的。 1.使用JSONP格式实现跨域 实现步骤 动态创建一个script标签 src指向接口的地址 定义一个函数和后端调用的函数名一样 实现代码 -- 在nodejs中使用http内…

刷题用到的非常有用的函数c++(持续更新)

阅读导航 字符串处理类一、stoi()(将字符串转换为整数类型)二、to_string()(将整数类型转换为字符串类型)三、stringstream函数(将一个字符串按照指定的分隔符进行分词) 字符串处理类 一、stoi()&#xff…

nodejs+vue家教管理系统

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1nodejs简介 4 2.2 express框架介绍 6 2.3 B/S结构 4 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性…

BGP服务器租用腾讯云和阿里云价格对比

BGP云服务器像阿里云和腾讯云均是BGP多线网络,速度更快延迟更低,阿里云BGP服务器2核2G3M带宽优惠价格108元一年起,腾讯云BGP服务器2核2G3M带宽95元一年起,阿腾云atengyun.com分享更多云服务器配置如2核4G、4核8G、8核16G等配置价格…

探索 Redis 与 MySQL 的双写问题

在日常的应用开发中,我们经常会遇到需要使用多种不同类型的数据库管理系统来满足各种业务需求。其中最典型的就是Redis和MySQL的组合使用。 这两者拥有各自的优点,例如Redis为高性能的内存数据库提供了极快的读写速度,而MySQL则是非常强大的…

Soul CEO张璐团队以用户安全为核心,探索社交平台安全治理新路径

“认同感”,是现代年轻人当下的核心社交需求之一,作为年轻人喜爱的新型开放式社交平台,Soul APP为年轻人们提供了一个自在表达、轻松互动的平台,为用户带来了志趣相投、精神共鸣的高质量网络连接。在Soul日活近千万的用户中,超过七成为Z世代年轻群体,如何能够为Z世代提供更安全…

lv8 嵌入式开发-网络编程开发 16 多路复用poll函数

目录 1 多路复用的多种实现方式 2 poll 2.1 poll 函数应用 3 epoll 函数族(效率最高) 3.1 epoll_create 创建epoll句柄 3.2 epoll_ctl epoll句柄控制接口 3.3 epoll_wait 等待 epoll 文件描述符上的 I/O 事件 3.4 epoll 函数应用 1 多路复用的多…

智能优化算法常用指标一键导出为EXCEL,CEC2017函数集最优值,平均值,标准差,最差值,中位数,秩和检验,箱线图...

声明:对于作者的原创代码,禁止转售倒卖,违者必究! 之前出了一篇关于CEC2005函数集的智能算法指标一键统计,然而后台有很多小伙伴在询问其他函数集该怎么调用。今天采用CEC2017函数集为例,进行展示。 为了突…

高效节能双冷源空调架构在某新建数据中心项目中的应用

随着互联网、通信、金融等行业的发展,数据中心产业迈入高质量发展新阶段,在国家“双碳”战略目标和“东数西算”工程的有力指引下,数据中心加快向创新技术、强大算力、超高能效为特征的方向演进。数据中心已经成为支撑经济社会数字化转型必不…

导引服务机器人 通用技术条件

声明 本文是学习GB-T 42831-2023 导引服务机器人 通用技术条件. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 6 检验规则 6.1 检验项目 检验分为型式检验和出厂检验。检验项目见表2。 表 2 检验项目 序号 检验项目 技术要求 检验方法 出厂检验 型…

SpringBoot 如何使用 Ehcache 作为缓存

使用Spring Boot Sleuth进行分布式跟踪 在现代分布式应用程序中,跟踪请求和了解应用程序的性能是至关重要的。Spring Boot Sleuth是一个分布式跟踪解决方案,它可以帮助您在分布式系统中跟踪请求并分析性能问题。本文将介绍如何在Spring Boot应用程序中使…

RS485通讯方式-详解

RS485是美国电子工业协会(EIA)在1983年批准的一个新的平衡传输标准,也称作差分。 RS485总线通常采用两线间的电压差为2V到6V表示逻辑1,以两线间的电压差为-2V到-6V表示逻辑0。 这种总线以其差分传输方式而闻名,发送端在…

Redis之缓存一致性

Redis之缓存一致性 1 缓存更新策略1.1 内存淘汰1.2 过期删除1.3 主动更新1.4 三种缓存更新策略的对比 2 更新缓存的两种方式3 缓存更新策略的实现方式3.1 先更新DB,后更新缓存3.2 先更新DB,后删除缓存3.3 先更新缓存,后更新DB3.4 先删除缓存&…

【数据结构C/C++】稀疏矩阵的压缩

文章目录 什么是稀疏矩阵?使用C语实现对稀疏矩阵的压缩408考研各数据结构C/C代码(Continually updating) 什么是稀疏矩阵? 稀疏矩阵(Sparse Matrix)是一种矩阵,其中大多数元素都是零。与稠密矩…

蓝桥杯 使用sort排序(c++)

sort是一个C已经为我们实现好的工具&#xff0c;当我们要用它时&#xff0c;需要先引入一个算法的库—— < algorithm >。需要说明的是&#xff0c;sort可以排序任何类型的元素&#xff0c;包括我们自己定义的结构体。 我们将需要在C文件的开始位置加上&#xff1a; #in…

C++: 继承

学习目标 1.继承的概念及定义 2.基类和派生类对象赋值转换(切片) 3.继承中的作用域(隐藏/重定义) 4.派生类的默认成员函数 5.继承与友元 6.继承与静态成员 7.菱形继承与菱形虚拟继承 8.总结 1.继承的概念及定义 1.1概念 继承: 它允许你创建一个新的类&#xff08;称为子类或派…

【pytorch】模型的保存与加载|| Dataloader数据加载器

Pytorch模型保存与加载&#xff0c;并在加载的模型基础上继续训练 系统学习Pytorch笔记三&#xff1a;Pytorch数据读取机制(DataLoader)与图像预处理模块(transforms) 一、只保存参数 1. 保存 一般地&#xff0c;采用一条语句即可保存参数&#xff1a; torch.save(model.s…

Docker系列--网络的配置

原文网址&#xff1a;Docker系列--网络的配置_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍Docker的网络的配置。 官网网址 https://docs.docker.com/engine/reference/commandline/network/ 网络的默认设置 Docker启动之后&#xff0c;系统中会产生一个名为docker0的…