session+cookies+localStorage+sessionStorage

本文深入探讨了HTTP协议无状态问题的解决方案——会话技术。详细解释了cookie与session的工作原理及区别,并介绍了H5提供的localStorage和sessionStorage特性。

cookiesession都属于会话技术的一部分,主要是用来解决http协议无状态的问题.

所谓的无记忆无状态指的是http的多次请求之间没有联系,无法把请求的状态保存下去,即同一用户请求同一浏览器的不同界面,服务器无法识别是否是同一用户的请求的问题,这会导致我们无法进行连续的业务逻辑.

会话技术是一种在同一浏览器对服务器的多次请求中(将数据持久化储存)实现连续业务逻辑的技术.

一次会话周期指的是从打开浏览器到关闭浏览器为止之间的时间间隔.

回到cookie和session.

cookie技术是将数据储存在浏览器的技术,而session技术指的是将数据存储到服务器的技术(可能是文件系统,数据库或者缓存(memcached,redis)).

在每次进行http请求的时候,浏览器都会携带cookie信息发送给服务器,服务器通过cookie信息拿到对应的session信息

cookie可能存在的一些问题,储存在浏览器,不稳定因素增加,相对于session不安全.另外每次请求都要携带所有cookie信息然后发送给服务器,对于带宽也是一种浪费

H5提供了两种新的将数据存储在客户端的方法,localStoragesessionStorage.

localStorage没有储存时间的限制,sessionStorage在会话周期结束之后就会清除.

localStorage和sessionStorage都不会自动把数据发送给服务器,这一点和cookie不同.两者也比cookie可以储存的数据大得多.

### CookiesSessionStorageLocalStorage 的区别 #### 存储机制 Cookies 是一种较早的客户端存储技术,主要用于保存用户的登录状态或其他少量数据。它们通过 HTTP 请求头发送到服务器,在每次请求时都会被附加到请求中[^1]。 `sessionStorage` 提供了一种临时性的存储方式,仅限于当前浏览器窗口或标签页中的会话生命周期内有效。一旦关闭对应的窗口或标签页,其内容就会丢失[^2]。而 `localStorage` 则提供了持久化的键值对存储功能,除非手动清除或者覆盖原有数据项外不会消失。 #### 数据容量与有效期 关于数据量方面,Cookie每条记录大小上限通常不超过4KB;相比之下,Web Storage API下的两种形式都允许更大的空间——大多数现代浏览器支持至少5MB甚至更多用于localStoragesessionStorage同样如此但因属于短期性质所以实际应用上可能更少一些具体取决于实现环境的不同情况. 另外值得注意的是时间维度上的差异: Cookie可以设置过期日期(expiration date),如果未指定则默认当次访问结束之后自动删除;对于其他两者来说并没有内置这样的概念 - 即使存在某些特定条件下(比如用户主动清理缓存)可能导致信息丧失之外正常情况下Localstorage里的资料会长久保留下去直到人为干预为止 whereas Sessionstoragedata will be erased upon termination of browsing session regardless whether there has been any activity during this period or not . #### 安全性和隐私保护措施 由于Cookie经常携带敏感的身份验证令牌等重要参数因此围绕着它的安全性设计格外严格包括但不限于HttpOnly标记防止JavaScript脚本读取以及Secure标志确保只在HTTPS连接下传输等等特性来增强防护力度 . 反观剩下的那两个选项虽然也具备一定的隔离机制比如说同源策略(Same-origin Policy)限制跨域操作但是总体而言缺乏专门针对恶意行为定制的安全手段所以在处理涉及个人机密之类的内容时候应该更加谨慎考虑采用更为稳妥的方式如加密后再储存之类的额外步骤加以保障 . ```javascript // Example usage of localStorage and sessionStorage localStorage.setItem('username', 'JohnDoe'); // Persists across sessions sessionStorage.setItem('gameState', JSON.stringify({ level: 10 })); // Only lasts until window/tab closes console.log(localStorage.getItem('username')); // Retrieves stored username from persistent store console.log(sessionStorage.getItem('gameState')); // Gets game state while tab/window remains open ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值