HTTP——Cookie LocalStorage SessionStorage

本文深入解析Cookie和LocalStorage的工作原理及应用场景,对比两者的区别,包括数据存储方式、生命周期及安全性考虑,适合前端开发者深入了解。

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

Cookie LocalStorage SessionStorage

使用cookie注册登录过程

注册

首先用户注册时,会打开注册页面,在打开页面的过程是get过程,如果服务器有这个路由设置,就会发出响应返回给浏览器一个响应,于是注册页面就显示在浏览器上。
当用户要进行注册时,首先浏览器会向服务器发出一个post请求,将自己在页面中输入账号,密码,确认密码,发送到服务器中(密码账号格式可以用js进行判断,也可以在服务器中进行判断,),服务器收到账号和密码时,首先要判断在数据库中账号是否存在,两次密码是否相同,两种都成功,才将账号和密码存入数据库中,并且返回状态码200,表示注册成功

登录

用户打开登录页面,输入账号和密码,点登录时会发向服务器出post请求,服务端读取数据库中的账号密码,进行判断,该账号和密码是否是上次注册的。如果成功,则登录成功进入首页,此时服务器返回一个cookie(设置为用户名的cookie)给浏览器,这个cookie有一定的时间期限(一般是20分钟)。下一次用户再访问当前首页时,首先浏览器会带上cookie,服务器首先会读取cookie,来判断此用户是不是上次cookie后的用户,如果是则会访问到自己的个人存储的隐私信息如(姓名,电话等),如果用户没有cookie,则进入一个公共的页面,要访问私有信息,必须要登录。

Cookie
  • Cookie的特点
    服务器通过Set-Cookie 响应头设置Cookie,浏览器得到Cookie后,每次请求都要带上Cookie,服务器读取Cookie就知道用户登录的信息
    浏览器请求资源时,会默认带上对应域名的cookie,如我请求qq.com的cookie不会带上baidu.com对应的cookie;
    在windows系统中一般存在C盘的一个文件中

  • 存在的问题
    Cookie会被用户篡改,如果获取了用户的Cookie值,通过手动更改自己浏览器的Cookie值就可以访问到该用户的隐私。

  • 解决方法
    为了防止用户篡改cookie,服务器可以利用Session,Session是基于Cookie实现的,通过cookie向客户端发送SessionID,服务器中有一块内存,存储了所有用户的Session,每次用户访问服务器时,服务器通过SessionID去读取Session,就知道用户的隐私信息。

  • Cookie 和 LocalStorage 的区别

  • Cookie
    在客户端访问同个域名时,将会带上上一次存储下来的Cookie,大小大约为4kb,浏览器默认页面关闭后消失。

  • LocalStorage
    和HTTP无关,客户端访问同个域名时不会带上LocalStorage,每个域名最大存储空间大约为5M,LocalStorage存储在客户端中只要你不删,永久存储。有getItem,setItem,removeItem等方法,setItem用于向LocalStorage写东西,getItem用于LocalStorage获取东西。用途:如一个网站更新,用户第一次进入alert出,该网站更新了一些新内容等等,并设定设定一个值 flag 为true通过getItem存如LocalStorage,下次加载时首先查看LocalStorage中flag是否存在并为true,则就判断是否提醒。

  • LocalStorage 和 SessionStorage 的区别
    SessionStorage在页面关闭后会消失,LocalStorage永久有效。其余的和LocalStorage一样。

缓存
  • Cache-Control
    可以通过max-age来设置缓存存在的时间,Cache-Control的max-age = 1000,表示加载了该缓存后,在1000秒内再次请求同一个URL时就停止请求,直接使用上一次缓存,不用重新向服务器请求下载。Expires和Cache-Control同时出现,优先执行Cache-Control。

  • ETag
    是在请求后,此次请求头If-None-Match的值与ETag值一致,则不再进行加载新的请求文件,直接从缓存中拿。状态码为304,每次都有请求,但相应是没有第四部分的,为空。

  • Expires
    是设定缓存到期的时间,如 ‘Expires’,‘Wed Aug 14 2019 20:29:56 GMT+0800’,表示时间到了设定时间后,需要重新向服务器请求。

### localStoragesessionStorage 的区别及使用场景 #### 存储容量 `localStorage` 和 `sessionStorage` 都提供了较大的存储空间,通常每域名可存储约5MB的数据[^2]。相比之下,`cookie` 的存储容量较小,单个 `cookie` 大小限制为4KB。 #### 数据生命周期 - **localStorage**: 数据永久保存,除非手动清除或通过 JavaScript 删除。即使浏览器关闭或设备重启,数据仍然存在。 - **sessionStorage**: 数据仅在当前会话期间有效,一旦页面会话结束(通常是关闭标签页),数据会被自动删除。 #### 跨窗口共享能力 - **localStorage**: 支持在同一域名下的多个窗口间共享数据。如果两个窗口打开的是同一网站的不同页面,它们可以通过 `localStorage` 实现数据同步。 - **sessionStorage**: 数据只限于同一个窗口内的不同标签页之间共享,无法跨窗口访问[^1]。 #### API 接口 两者都提供类似的简单键值对操作方法: ```javascript // 设置数据 localStorage.setItem('key', 'value'); sessionStorage.setItem('key', 'value'); // 获取数据 const valueFromLocalStorage = localStorage.getItem('key'); const valueFromSessionStorage = sessionStorage.getItem('key'); // 移除特定数据项 localStorage.removeItem('key'); sessionStorage.removeItem('key'); // 清空所有数据 localStorage.clear(); sessionStorage.clear(); ``` #### 应用场景对比 - **localStorage** - 适合长期存储不需要频繁更改的信息,比如用户的偏好设置、主题模式选择等。 - 可用于构建离线应用程序,在无网络连接的情况下仍能正常运行[^3]。 - **sessionStorage** - 主要应用于短期任务处理中的状态跟踪,例如表单填写过程中防止重复提交或者购物车商品数量计数器等功能[^4]。 - 常见例子还包括登录态验证后的某些一次性标记位管理,像提示框显示逻辑控制等。 --- ### 示例代码展示 以下是基于上述两种技术实现的一个具体案例——记录用户是否首次访问某网页: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Local Storage vs Session Storage</title> <script type="text/javascript"> document.addEventListener("DOMContentLoaded", function() { const isFirstVisitKey = 'isFirstVisit'; let firstTimeUser; if (sessionStorage.getItem(isFirstVisitKey)) { console.log("Not the user's first visit within this session."); } else { firstTimeUser = true; sessionStorage.setItem(isFirstVisitKey, JSON.stringify(firstTimeUser)); alert("Welcome! This is your first time visiting during this browser session!"); } // Persistent storage example with localStorge if (!localStorage.getItem('totalVisits')) { localStorage.setItem('totalVisits', 0); } const visitsCount = parseInt(localStorage.getItem('totalVisits'), 10) + 1; localStorage.setItem('totalVisits', visitsCount.toString()); document.getElementById('visits').textContent = `You have visited ${visitsCount} times.`; }); </script> </head> <body> <p id="visits"></p> </body> </html> ``` 在此示例中,我们利用了 `sessionStorage` 来检测用户在一个浏览会话期内是否为首访者,并借助 `localStorage` 统计总的访问次数并持久化该数值。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值