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

Session和Cookie的定义是什么?他们之间有什么区别?

一、什么是 Cookie?

Cookie 是一小段文本信息(最多约4KB),由服务器生成并发送给浏览器,浏览器会将其保存在用户本地。此后,浏览器每次向同一服务器发起请求时,都会自动携带这个 Cookie。

主要特点:

  • 存储位置:客户端(浏览器)。

  • 生命周期:可设置有效期。可以是会话级(浏览器关闭即失效),也可以设置一个未来的过期时间。

  • 参与方:服务器创建,浏览器保存和发送。

  • 安全性:相对较低,因为存储在客户端,可能被用户查看或篡改。不应存储敏感信息(如密码)。

常见用途:

  1. 记录用户偏好:如语言设置、主题样式(深色/浅色)。

  2. 记录非关键信息:如购物车商品ID(未登录时)。

  3. 用户追踪:广告商用来记录用户的浏览习惯。

Cookie 的工作流程:

deepseek_mermaid_20250923_e714e5

 

二、什么是 Session?

Session 是一种在服务器端保存用户状态信息的机制。因为 HTTP 协议是无状态的,Session 被用来跟踪用户在整个网站访问期间的行为。

核心思想:

服务器为每个用户创建一个唯一的标识(称为 Session ID),并通过 Cookie 将这个 ID 传递给浏览器。浏览器后续的请求都会带着这个 Session ID。服务器通过这个 ID 来找到对应的服务器端存储的数据(如用户ID、登录状态等)。

主要特点:

  • 存储位置:服务器端(内存、文件、数据库等)。

  • 生命周期:从用户会话开始到结束(通常有超时时间,如用户30分钟无活动则失效)。

  • 安全性:相对较高,因为敏感数据存储在服务器端,客户端只保存一个无意义的ID。

  • 存储量:理论上只受服务器资源限制。

常见用途:

  1. 用户登录状态:这是最经典的用法。登录成功后,服务器在 Session 中记录 user_id = 123

  2. 购物车信息(已登录用户)。

  3. 表单令牌(CSRF Token):用于防止跨站请求伪造。

Session 的工作流程(结合Cookie):

deepseek_mermaid_20250923_5317aa

 

三、核心区别总结(表格对比)

 
特性CookieSession
存储位置 客户端(浏览器) 服务器端
数据类型与大小 只能是字符串,大小有限制(约4KB) 可以是任意对象(如Java对象),大小理论上无限
安全性 较低,数据存储在客户端,可能被查看和篡改 较高,敏感数据存储在服务器,客户端只有ID
生命周期 可长期有效,由过期时间控制 通常较短,浏览器关闭或超时后失效
性能影响 不占用服务器资源,但每次请求都会携带,增加带宽 占用服务器内存/存储,用户量巨大时影响性能
依赖性 可以独立使用 通常依赖于 Cookie 来传递 Session ID

四、一个典型的登录场景(综合运用)

  1. 登录请求:用户在登录页面输入用户名和密码,点击提交。

  2. 验证身份:服务器验证凭证正确。

  3. 创建Session:服务器在内存(或数据库)中创建一个新的 Session,并存入 user_id 等关键信息。

  4. 设置Cookie:服务器生成一个唯一的 Session ID,并通过响应头的 Set-Cookie 字段发送给浏览器(例如:Set-Cookie: session_id=abc123; Path=/)。

  5. 保存Cookie:浏览器收到指令,将 session_id=abc123 这个 Cookie 保存起来。

  6. 访问其他页面:当用户访问网站的个人中心时,浏览器会自动在请求头中带上这个 Cookie:Cookie: session_id=abc123

  7. 识别用户:服务器收到请求,取出 session_id 的值 abc123,然后在自己的 Session 存储中查找 abc123 对应的数据,找到了 user_id

  8. 返回内容:服务器知道这是用户123,于是从数据库拉取用户123的个人信息,生成页面返回给浏览器。

  9. 登出:用户点击退出登录,服务器端销毁对应的 Session 数据。即使浏览器的 Cookie 还在,也无法再找到有效的 Session。

重要补充:如果用户禁用了Cookie怎么办?

Session 机制默认依赖 Cookie。如果用户禁用了 Cookie,就需要其他方式来传递 Session ID,最常见的方法是 URL 重写。即,服务器在生成每个链接时,自动将 Session ID 作为参数附加在 URL 后面。

例如:原本的链接是 https://example.com/profile,会变成 https://example.com/profile;jsessionid=abc123

这种方式不够安全(URL 可能被记录、分享)且不方便,但是一种备选方案。

结论

  • Cookie 是客户端的存储机制,用于保存一些不敏感的小数据,并实现状态的持久化。

  • Session 是服务器端的状态管理机制,用于保存敏感或重要的用户会话数据。

  • 它们不是对立的选择,而是协作的伙伴。在典型的 Web 应用中,Session 利用 Cookie 来传递识别用户身份的 ID,从而将无状态的 HTTP 协议变得有状态。

 

http://www.sczhlp.com/news/128119/

相关文章:

  • 使用C++编写的一款射击五彩敌人的游戏 - 详解
  • 两人合伙做网站但不准备开公司湖南建设科技节能协会网站
  • 深圳制作网站公司哪家好上海做网站 公司
  • 古镇灯饰网站建设wordpress 文章缩进
  • 网站增加关键字半透明wordpress主题源码
  • 网站开发工程师面试试题开鲁视频
  • CG-65 剖面细管式温度传感器 可实时监测不同土层温度动态
  • list集合根据某字段获取某个对象
  • .NET STS 版本支持 24 个月
  • 设计素材网站哪个最好免费福田祥菱怎么样
  • 重庆免费网站推广软件wordpress 漫画插件
  • 如何分析网站的设计深圳外贸公司注册
  • 网站优化改版大数据查询
  • 网站源码建设模板住房和城乡建设部主网站
  • 网站添加cnzz自己做产品品牌网站
  • 网站建设基础 ppt找建筑网站
  • 江西哪家网站建设公司好建设网证书查询
  • 如何设计一个完整的网站网站推广策划报告航空航天
  • 京东联盟建网站长沙网络seo公司助企业突破
  • 后缀数组基础 Suffix Array
  • 济宁做网站有哪几家正规网站优化哪个公司好
  • 网站换域名影响吗做奢侈品网站有哪些
  • wordpress lamp 建站python做的网站源码
  • 试剂网站建设贵州网站开发
  • 网站访问速度 云组机福州高级seo经理
  • 电商网站开发图书湖北建设工程信息网
  • 沧州网站建设多少钱什么值得买网站模板
  • 百度建设网站江门做网站费用
  • 网站可以自己备案吗合肥瑶海区新楼盘在售
  • @Param的作用