Cookie和Session的认识

本文深入解析了Cookie与Session的工作原理及应用。详细说明了Cookie如何在客户端保存信息,而Session则在服务端存储会话数据。阐述了session_id在客户端和服务端间传递的过程,以及服务端如何通过操作Cookie实现对会话的管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. Cookie的信息保存在客户端,Session的信息保存在服务端。

  2. 每次访问网站,都会产生一个会话,服务端会生成一个session_id,以这个session_id来区别不同的会话。session_id会发送到客户端,以后每次客户端都会在请求的header中的Cookie中发送session_id。这个session_id通常会在浏览器关闭后销毁。

  3. 服务端可以对Cookie进行操作。

  4. Cookie不做特别设置(Domain、Path),在计算机是根据站点保存的。再次访问这个网站时,可以使用这个网站Cookie保存的信息。

### Cookie、LocalStorage Session 的区别及使用场景 #### 定义与基本特性 Cookie 是一种小型文本文件,由服务器发送到用户的浏览器并存储在客户端上。它主要用于保持用户会话状态以及跨页面传递少量数据[^1]。 LocalStorage 提供了一种更大的存储空间来保存键值对形式的数据,并且这些数据不会因为关闭窗口而消失,除非手动清除或者设置了过期时间[^2]。 SessionStorage 同样用于存储键值对,但它仅限于当前会话期间存在;一旦浏览器标签页被关闭,则所有存储内容都会丢失。 #### 数据容量限制 - **Cookie**: 单个域名下最多可以设置约 20 条记录,每条不超过 4KB 大小。 - **LocalStorage**: 支持更大规模的数据量,默认情况下大多数浏览器允许每个原点 (origin) 存储大约 5MB 到 10MB 左右的信息。 - **SessionStorage**: 类似 LocalStorage ,但通常也有类似的上限范围即 5MB 至 10MB 不等。 #### 生命周期管理 - **Cookie** 可以设定具体的到期日期或有效期,在此之后自动删除;如果未指定则默认当次浏览结束时销毁。 - **LocalStorage** 中的数据没有明确的时间界限,除非应用程序主动调用 API 清理掉特定项或是整个数据库。 - **SessionStorage** 自动绑定至某个单独的 Tab/Window 上面,只要该实例还活着那么里面的内容就一直保留着直到退出为止。 #### 安全考量 由于 Cookies 经常携带重要凭证比如登录令牌之类的敏感资料,因此建议采取额外措施保护它们免受攻击威胁,例如启用 HttpOnly 属性防止 JavaScript 访问、Secure 标志确保只通过 HTTPS 进行通信等等^。 相比之下,虽然 LocalStorage SessionStorage 并不适合用来储存机密级别的东西,但在某些场合仍然能够发挥积极作用——前提是开发者清楚认识到其局限性并且合理规避风险因素。 ```javascript // 设置 localStorage 示例 localStorage.setItem('username', 'JohnDoe'); // 获取 localStorage 值 const username = localStorage.getItem('username'); console.log(username); // 输出 JohnDoe // 删除单个项目 localStorage.removeItem('username'); // 清除全部数据 localStorage.clear(); ``` ```javascript // 设置 sessionStorage 示例 sessionStorage.setItem('pageViewCount', 1); let count = parseInt(sessionStorage.getItem('pageViewCount')) || 0; count += 1; sessionStorage.setItem('pageViewCount', count.toString()); console.log(`Page has been viewed ${count} times.`); ``` ```javascript // 创建带选项 cookies 示例 document.cookie = "name=John Doe; expires=Thu, 18 Dec 2023 12:00:00 UTC"; ``` ### 总结对比表 | 特性 | Cookie | LocalStorage | SessionStorage | |-----------------|----------------------------------|------------------------------|-----------------------------| | **持久性** | 可配置 | 长期 | 当前会话 | | **安全性** | 较高 | 低 | 低 | | **适用范围** | 跨域请求 | 同源策略 | 同源同窗 | | **最大体积** | ~4 KB per domain | ~5 MB - 10 MB per origin | ~5 MB - 10 MB per window | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值