cookies存储
- 行业动态
- 2025-02-07
- 2170
Cookies 存储是一种在浏览器中广泛应用的数据存储方式,以下是关于它的详细内容:
1、定义与原理
定义:Cookie 是服务器发送到用户浏览器并保存在本地的一小块数据,它是某些网站为了辨别用户身份、进行会话跟踪而储存在用户本地终端上的数据,通常经过加密。
原理:当用户访问一个网站时,服务器会在响应头中设置一个 Set-Cookie 字段,将 Cookie 信息发送给浏览器,浏览器接收到 Cookie 后,会将其保存在本地的一个文本文件中,并在后续对该网站的请求中自动携带 Cookie 信息,以便服务器识别用户的身份和状态。
2、特点
数据大小限制:通常一个 Cookie 的大小限制在 4KB 左右,不同浏览器可能会有略微的差异。
有效期:可以设置 Cookie 的有效期,分为会话期 Cookie(浏览器关闭后就失效)和持久性 Cookie(可以设置过期时间),设置一个过期时间为 1 天的 Cookie,当用户在 1 天内再次访问该网站时,浏览器会自动携带该 Cookie。
安全性:由于 Cookie 会随着每个 HTTP 请求发送到服务器,如果存储了敏感信息(如密码),很容易被窃取,应该避免在 Cookie 中存储敏感信息,或者对其进行加密处理。
3、用途
身份验证:在用户登录后,服务器可以通过设置一个包含用户身份标识的 Cookie 来跟踪用户的会话,比如在一个网站登录后,后续的请求可以通过这个 Cookie 来识别用户是否已经登录。
个性化设置:存储用户的一些偏好设置,如语言、主题等,当用户再次访问网站时,可以根据这些 Cookie 来提供个性化的体验。
购物车功能:购物网站通常把已选物品保存在 Cookie 中,这样可以实现不同页面之间数据的同步,同时在提交订单的时候又会把这些 Cookie 传到后台。
4、存储位置
内存 cookie:如果没有设置 cookie 的 Expires 属性,cookie 将停留在客户端的内存中,只在当前浏览器会话中有效,浏览器窗口关闭后就会被清除。
硬盘 cookie:如果设置了 cookie 的 Expires 属性,cookie 将保存到用户的硬盘上,直到过期时间或用户手动删除为止。
5、操作方法
服务器端设置:通过设置 Set-Cookie 头信息来创建一个 Cookie,在一个 Node.js 服务器端使用 express 框架,设置一个名为 user_id 的 Cookie 可以这样做:const express = require(‘express’); const app = express(); app.get(‘/’, (req, res) => { res.cookie(‘user_id’, ‘12345’); res.send(‘Cookie set’); }); app.listen(3000, () => { console.log(‘Server running on port 3000’); });。
客户端设置:在浏览器端,可以通过 document.cookie 来访问和操作 Cookie,读取 user_id 这个 Cookie:console.log(document.cookie);不过 document.cookie 返回的是一个包含所有 Cookie 的字符串,格式为 name=value; name2=value2;…,如果要获取特定的 Cookie 值,需要进行一些字符串处理。
6、相关示例代码
设置 Cookie:function setCookie(cname, cvalue, exdays) { var d = new Date(); d.setTime(d.getTime() + (exdays*24*60*60*1000)); var expires = "expires="+ d.toUTCString(); document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; } 。
获取 Cookie:function getCookie(cname) { var name = cname + "="; var decodedCookie = decodeURIComponent(document.cookie); var ca = decodedCookie.split(‘;’); for(var i = 0; i <ca.length; i++) { var c = ca[i]; while (c.charAt(0) == ‘ ‘) { c = c.substring(1); } if (c.indexOf(name) == 0) { return c.substring(name.length, c.length); } } return ""; } 。
删除 Cookie:function eraseCookie(cname) { document.cookie = cname + "=; Max-Age=-99999999;"; } 。
7、与其他存储方式的区别
与 LocalStorage 的区别:LocalStorage 提供了一种在浏览器中持久存储数据的方法,它的存储容量比 Cookie 大得多,一般在 5MB 10MB 左右;LocalStorage 只能存储字符串类型的数据,而 Cookie 可以存储键值对形式的多种数据类型;LocalStorage 的数据是基于域名隔离的,不同域名下不能直接访问对方的 LocalStorage 数据,而 Cookie 可以在同源窗口中共享。
与 SessionStorage 的区别:SessionStorage 的数据在浏览器会话期间有效,即当浏览器窗口或标签页关闭后,数据就会丢失;而 Cookie 可以根据设置的有效期来决定其存活时间,SessionStorage 也不支持在不同浏览器窗口之间共享数据,而 Cookie 可以在同源的不同窗口之间共享。
8、安全威胁
Cookie 捕获 / 重放攻击:攻击者可以通过载入等反面程序,或使用跨站脚本攻击等手段偷窃存放在用户硬盘或内存中的 Cookie,攻击者可以利用捕获到的 Cookie 假冒受害者的身份发动攻击。
会话定置攻击:攻击者向受害者主机注入自己控制的认证 Cookie 等信息,使得受害者以攻击者的身份登录网站,从而窃取受害者的会话信息。
CSRF 攻击:攻击者可能利用网页中的反面代码强迫受害者浏览器向被攻击的 Web 站点发送伪造的请求,篡夺受害者的认证 Cookie 等身份信息,从而假冒受害者对目标站点执行指定的操作。
Cookies 存储虽然方便了用户和开发者,但也存在一些安全隐患,在使用 Cookies 时,需要注意保护用户的隐私和安全,合理设置 Cookie 的属性和使用场景。
本站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本站,有问题联系侵删!
本文链接:http://www.xixizhuji.com/fuzhu/110961.html