当前位置:首页 > 行业动态 > 正文

cookies存储

Cookies存储在客户端,由浏览器保存和管理。它们通常用于保存用户会话信息、偏好设置等,以便在用户再次访问网站时能够提供个性化的体验。

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 的属性和使用场景。

0