浏览器存储
2020-04-16 11:09:04 0 举报
AI智能生成
前端浏览器存储知识总结
作者其他创作
大纲/内容
cookie
HTTP Cookie(也叫Web Cookie或浏览器Cookie)是<b><font color="#0076b3">服务器发送到用户浏览器</font></b>并<b><font color="#0076b3">保存在本地</font>的一小块数据</b>,<br>它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。<br>通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态。<br>Cookie使基于无状态的HTTP协议记录稳定的状态信息成为了可能。<br><br>Cookie主要用于以下三个方面:<br><br><ol><li>会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)<br></li><li>个性化设置(如用户自定义设置、主题等)<br></li><li>浏览器行为跟踪(如跟踪分析用户行为等)<br></li></ol><br>Cookie曾一度用于客户端数据的存储,因当时并没有其它合适的存储办法而作为唯一的存储手段,<br>但现在随着现代浏览器开始支持各种各样的存储方式,Cookie渐渐被淘汰。<br>由于<b>服务器指定Cookie后,浏览器的每次请求都会携带Cookie数据</b>,会带来<b>额外的性能开销</b>(尤其是在移动环境下)。<br>新的浏览器API已经允许开发者直接将数据存储到本地,如使用 <b>Web storage API </b>(本地存储和会话存储)或<b> IndexedDB</b> 。<br>
有效期
会话期 Cookie
会话期Cookie是最简单的Cookie:<b>浏览器关闭之后它会被<font color="#0076b3">自动删除</font></b>,也就是说它<b>仅在会话期内有效</b>。<br>会话期Cookie<b>不需要指定过期时间</b>(Expires)<b>或者有效期</b>(Max-Age)。<br>需要注意的是,<b>有些浏览器提供了会话恢复功能</b>,这种情况下即使关闭了浏览器,会话期Cookie也会被保留下来,就好像浏览器从来没有关闭一样。<br>
持久性 Cookie
持久性Cookie可以<b>指定一个特定的 <font color="#0076b3">过期时间</font></b>(Expires)<b><font color="#0076b3">或有效期</font></b>(Max-Age)。<br><br>Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT;<br><br>提示:当Cookie的过期时间被设定时,<b>设定的日期和时间只与<font color="#0076b3">客户端相关</font></b>,而不是服务端。<br>
大小
单个 cookie 大小 :一般是 4095 字节<br><br>每个域 cookie 个数:一般 <b>30~50 个</b><br><br>每个域 cookie 总大小: 不要超过 <b>4095 字节</b><br>
作用域
<b>Domain 和 Path </b>标识定义了Cookie的作用域:即Cookie应该发送给哪些URL。<br>
Domain
<b>Domain </b>标识指定了<b>哪些主机可以接受Cookie</b>。<br><b>如果<font color="#0076b3">不指定</font>,默认为当前文档的主机(<font color="#0076b3">不包含子域名</font>)</b>。<br><b>如果<font color="#0076b3">指定</font>了Domain,则<font color="#0076b3">包含子域名</font></b>。<br><br>例如,如果设置 Domain=mozilla.org,则Cookie也包含在子域名中(如developer.mozilla.org)。<br>
Path
Path indicates a URL path that must exist in the requested URL in order to send the Cookie header. <br><b>Path</b> 指定了一个<b>为了发送 Cookie header</b> 必须<b>存在于请求的 URL 中的 URL 路径</b>。<br>以字符 %x2F ("/") 作为路径分隔符,<b>子路径也会被匹配</b>。<br><br>例如,设置 Path=/docs,则以下地址都会匹配:<br><br>/docs<br>/docs/Web/<br>/docs/Web/HTTP<br>
Web Storage
Web Storage API 使浏览器能以一种<b><font color="#0076b3">比使用Cookie更直观</font></b>的方式存储键/值对。
sessionStorage
为每一个给定的源(given origin)维持一个独立的存储区域。<br>
<ol><li>Stores data only for a session, meaning that the data is stored until the browser (or tab) is closed.<br></li><li>Data is never transferred to the server.<br></li><li>Storage limit is larger than a cookie (at most<b><font color="#0076b3"> 5MB</font></b>).<br></li></ol>
<ol><li>A page session lasts <b>as long as the browser is open</b>, and <b>survives over page <font color="#0076b3">reloads</font> and <font color="#0076b3">restores</font></b>.<br></li><li><b>Opening a page in a new tab or window</b> creates <b>a new session</b> with the value of the top-level browsing context, which differs from how session cookies work.<br></li><li>Opening <b>multiple tabs/windows with the <font color="#0076b3">same URL</font> </b>creates sessionStorage <b>for <font color="#0076b3">each</font> tab/window</b>.<br></li><li><b>Closing a tab/window</b> <b>ends the session</b> and clears objects in sessionStorage.<br></li></ol>
Data stored in sessionStorage is <b>specific to the protocol </b>of the page. <br>In other words, <b>http://example.com</b> will have <b><font color="#0076b3">separate</font> storage </b>than <b>https://example.com</b>.<br>
localStorage
与 sessionStorage 同样的功能,但是在浏览器关闭然后重新打开后数据仍然存在。<br>
<b><font color="#0076b3">5M</font></b>左右,各浏览器的存储空间有差异。
封装方法设置失效时间
const myLocalStorage = {<br> set(key, data, time) {<br> let obj = {<br> data,<br><b> createTime: Date.now()</b>,<br><b> lifeTime: time || 1000 * 60 * 60</b> //默认设置过期时间一个小时<br> };<br> localStorage.setItem(key, JSON.stringify(obj));<br> },<br> get(key) {<br> let obj = JSON.parse(localStorage.getItem(key));<br> let {data,createTime,lifeTime}=obj<br> let getTime = Date.now();<br><b> if (getTime - createTime >= lifeTime) {<br> localStorage.removeItem(key);<br> return null;</b><br> } else {<br> return data;<br> }<br> }<br>};<br>
参考文章
https://www.cnblogs.com/caizhenbo/p/6594443.html
https://developer.mozilla.org/zh-CN/docs/Web/API/Web_Storage_API
https://www.cnblogs.com/candy-xia/p/11561542.html<br>
0 条评论
下一页