cookie,session和token

HTTP 协议是无状态的,Cookie,session和token都是为了实现用户的状态的持久性。

对于敏感信息和大量数据,最好将其存储在服务器端,而对于较小、非敏感的数据,可以考虑存储在客户端。

一个cookie存储最大 4KB左右

一个域名可以有多个cookie

浏览器可以存储不同域名的上千个cookie

  • 名称(Name):Cookie 的名称,用于标识 Cookie。
  • 值(Value):与 Cookie 相关联的值,可以是任何文本字符串。
  • 域(Domain):指定可以接收 Cookie 的域名。默认情况下,如果不指定域,Cookie 只在设置它的域名下有效。
  • 路径(Path):指定可以接收 Cookie 的路径。默认情况下,如果不指定路径,Cookie 只在设置它的路径下有效。
  • 过期时间(Expires 或 Max-Age):指定 Cookie 的有效期。如果设置了过期时间,那么在到期之前,客户端会一直保存这个 Cookie,并在每次请求时发送回服务器。过期时间可以是一个日期时间,或者是一个相对时间(例如,相对于当前时间的秒数)。
  • 安全标志(Secure):如果设置了安全标志,那么只有在使用 HTTPS 连接时,客户端才会发送这个 Cookie。
  • HttpOnly 标志(HttpOnly):如果设置了 HttpOnly 标志,那么客户端脚本(如 JavaScript)将无法访问该 Cookie,这有助于防止跨站点脚本攻击(XSS 攻击)。
    以下是一个示例 Cookie 的 HTTP 头部:
dart 复制代码
Set-Cookie: sessionId=abc123; Expires=Wed, 09 Jun 2021 10:18:14 GMT; Path=/; Secure; HttpOnly

cookie的执行策略

当服务器发送给浏览器set-cookie,浏览器自动将cookie添加到缓存中,并且在相同域名每次请求都会携带,直到过期。

Cookie用途

Cookie用于以下几个方面:

  • 会话管理,用户状态

  • 个性化设置:网站可以使用Cookie来存储用户的个性化设置,如语言首选项、主题首选项、字体大小等,以提供更好的用户体验。

  • 购物车信息

  • 用户偏好:Cookie可以用于存储用户的偏好设置,例如喜欢的内容类别、关注的主题等。

  • 广告跟踪

  • 分析和统计:网站所有者可以使用Cookie来收集有关用户访问行为的信息,例如访问时间、页面浏览次数等,以进行分析和统计。

Session

Session策略

服务器将用户登录信息,购物车内容等信息存储在session中,会话通常是有过期时间的,一旦会话过期,用户的登录状态就会结束。登陆后,服务器将sessionid返回给客户端,客户端每次请求时携带cookie,从而实现用户状态的维护。

在Tomcat中,会话数据通常存储在服务器内存中,但也可以配置为存储在数据库或其他外部持久化存储中。当客户端发送带有Session ID的Cookie时,Tomcat会识别这个Session ID,并将对应的会话数据加载到当前请求的上下文中,使得应用程序可以方便地访问和操作用户的会话信息。

使用cookie和session维持会话

使用cookie和token维持会话

通常使用token,就不使用session了,直接将信息存储在token中

相关推荐
FQNmxDG4S4 小时前
Java多线程编程:Thread与Runnable的并发控制
java·开发语言
虹科网络安全5 小时前
艾体宝干货|数据复制详解:类型、原理与适用场景
java·开发语言·数据库
axng pmje6 小时前
Java语法进阶
java·开发语言·jvm
rKWP8gKv76 小时前
Java微服务性能监控:Prometheus与Grafana集成方案
java·微服务·prometheus
老前端的功夫6 小时前
【Java从入门到入土】28:Stream API:告别for循环的新时代
java·开发语言·python
qq_435287926 小时前
第9章 夸父逐日与后羿射日:死循环与进程终止?十个太阳同时值班的并行冲突
java·开发语言·git·死循环·进程终止·并行冲突·夸父逐日
小江的记录本6 小时前
【Kafka核心】架构模型:Producer、Broker、Consumer、Consumer Group、Topic、Partition、Replica
java·数据库·分布式·后端·搜索引擎·架构·kafka
yaoxin5211236 小时前
397. Java 文件操作基础 - 创建常规文件与临时文件
java·开发语言·python
极客先躯8 小时前
高级java每日一道面试题-2025年11月24日-容器与虚拟化题[Dockerj]-runc 的作用是什么?
java·oci 的命令行工具·最小可用·无守护进程·完全标准·创建容器的核心流程·runc 核心职责思维导图
用户60648767188968 小时前
AI 抢不走的技能:用 Claude API 构建自动化工作流实战
java