当前位置: 首页 > news >正文

Cookie、Session和Token

1. Cookie(HTTP Cookie)

定义与机制:Cookie是服务器发送到用户浏览器并保存在本地的一小块数据,浏览器会在后续请求中自动携带这些数据返回给服务器。Cookie主要用于:

  • 会话状态管理(如登录状态)

  • 个性化设置(如语言偏好)

  • 用户行为跟踪(如分析用户浏览习惯)

技术细节

  • 大小限制:通常每个Cookie不超过4KB

  • 生命周期:可通过ExpiresMax-Age设置有效期

  • 安全属性:Secure(仅HTTPS传输)、HttpOnly(防XSS)、SameSite(防CSRF)

示例应用

// 服务器设置Cookie Set-Cookie: sessionid=38afes7a8; HttpOnly; Secure; SameSite=Lax

2. Session(会话)

工作原理:Session是服务器端存储的用户会话信息,通常通过Session ID与客户端关联。典型实现方式:

  1. 服务器创建Session并存储(内存/数据库)

  2. 通过Cookie将Session ID发送给客户端

  3. 客户端后续请求携带Session ID

  4. 服务器验证Session ID获取用户数据

存储方案对比

  • 内存存储:高性能但服务器重启丢失

  • 数据库存储:持久化但增加I/O开销

  • 分布式缓存(如Redis):兼顾性能与可靠性

安全考虑

  • Session固定攻击防护

  • 会话超时设置

  • 敏感操作需重新认证

3. Token(令牌认证)

现代认证方案:以JWT(JSON Web Token)为代表的Token认证机制包含三个部分:

  1. Header(算法类型)

  2. Payload(携带数据)

  3. Signature(防篡改验证)

典型流程

  1. 用户登录后服务器签发Token

  2. 客户端存储Token(LocalStorage/Cookie)

  3. 后续请求在Authorization头携带Token

  4. 服务器验证签名并提取数据

优势体现

  • 无状态:服务器不需存储会话

  • 跨域支持:适合微服务架构

  • 细粒度控制:可包含权限信息

安全实践

// JWT示例 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ. SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

4. 对比总结

特性CookieSessionToken
存储位置客户端服务端客户端
安全性需防护措施依赖服务器安全签名验证
扩展性同源限制集群需共享存储天然支持分布式
典型用途会话跟踪用户会话管理API认证/SSO

选型建议

  • 传统Web应用:Cookie+Session

  • 前后端分离/移动端:Token

  • 高安全要求:结合多种机制(如CSRF Token)

http://www.cnnetsun.cn/news/1418643.html

相关文章:

  • 深入剖析zygisk注入对抗中的soinfo空隙检测技术
  • YauS-events:嵌入式硬实时事件调度引擎解析
  • 告别模糊签名!用PS+AI打造高清电子签名的5个关键步骤
  • 从零开始DIY触摸小夜灯:立创EDA实战指南
  • ComfyUI进阶物品移除指南:结合Inpaint与IPAdapter的实战技巧
  • Sglang部署实战:关键参数调优与性能优化指南
  • ATtiny85驱动MCP23017的轻量级I²C GPIO扩展库
  • STM32实战:24C02 EEPROM读写全攻略(附I2C时序详解)
  • Qwen3-32B-Chat百度OCR后处理:扫描文档理解+结构化信息提取+表格重建效果
  • 家用路由器NAT配置实战:5分钟搞定内网穿透与端口映射
  • MLIR在深度学习编译器中的核心作用与实践解析
  • OFA-large模型惊艳效果:新闻配图与导语语义蕴含关系深度分析
  • 如何在Windows系统中快速定位热键冲突的终极指南
  • 微服务爬虫架构设计:解耦采集/解析/存储,支持百万级数据并发
  • MatrixMiniR4:面向机器人运动控制的STM32H7集成开发平台
  • PP-DocLayoutV3保姆级教学:从平台选镜像→部署→HTTP访问→结果验证全链路
  • M5-LoRaWAN库详解:基于ASR6501的LoRaWAN终端开发指南
  • AIVideo与Matlab集成:科研视频数据处理与分析
  • AudioSeal Pixel Studio从零开始:Dockerfile多阶段构建减小镜像体积至1.2GB
  • ATE测试时序配置实战:如何用set test_default_strobe和strobe_width优化你的扫描链测试覆盖率
  • 告别MyBatis!用Hutool的Entity玩转数据库CRUD(含事务实战案例)
  • Chart.js 饼图详解
  • 逆向工程师的迷宫题工具箱:IDA地图提取+三维迷宫破解技巧
  • 深入解析Cocos APP中jsc文件的XXTEA逆向实战
  • GD32F470平台SHT30温湿度传感器驱动开发与实战
  • CentOS7 Samba共享服务器:从零到精通的实战配置手册
  • translategemma-4b-it效果展示:手写公式+英文标注图→中文教学讲义级翻译
  • 手把手教你解读AI基准测试报告:以GPT-4V在MMMU中的表现为例
  • Ubuntu 22.04 LTS 修改主机名后,SSH连接失败的坑我帮你踩了
  • Faster-RCNN实战:用torchvision+ResNet-50+FPN搭建目标检测模型(附代码详解)