JavaScript Cookie 读写技巧与服务器端安全设置详解

作者:沉舟

时间:2026-10-26

浏览:321

本文详解 JavaScript 中 Cookie 的读取与设置方法,解析 cookie 字符串格式及长度限制。重点介绍 expires、path、domain 等关键参数,以及通过服务器端设置 Secure 和 HttpOnly 属性保障数据安全,并探讨跨域第三方 Cookie 限制及 P3P 头部的解决方案。

文章目录

JavaScript Cookie 的读取与设置

读取 Cookie 字符串的方法如下:

代码如下:

alert(document.cookie); 

网站的 Cookie 字符串包含该域名下所有 JavaScript 可访问的 Cookie(不包括设置了 HttpOnly 属性的 Cookie)。多个 Cookie 之间以分号和空格分隔,通常限制为 20 个或 50 个。例如,包含两个 Cookie 的字符串格式为:

代码如下:

document.cookie = "key1=value1; key2=value2"

单个 Cookie 字符串的最大长度为 4KB。若超出数量或长度限制,将返回空值。当 Cookie 数量超限导致部分丢失时,规范规定应优先丢失最近最少使用的 Cookie,但浏览器实现未必完全遵循此规范。

设置单个 Cookie 的方法如下:

代码如下:

document.cookie="key=value;expires=date;path=/;domain=xxx.com;secure";

若要设置多个 Cookie,只需反复执行 document.cookie = XXX 即可,系统会自动将其与其他 Cookie 拼接为一个完整的 Cookie 字符串。

若需读取特定 Cookie 的值,必须通过解析 Cookie 字符串来获取。

Cookie 关键参数详解

以下是设置 Cookie 时的几个关键参数:

1、名称与值:key 代表 Cookie 名称,value 代表 Cookie 值。

2、过期时间:expires 用于设定过期时间,格式为格林威治标准时间字符串,例如:

代码如下:

expires = new Date('2011-12-30').toUTCString(); //"Fri, 30 Dec 2011 00:00:00 GMT"

若未设置过期时间,Cookie 将在浏览器关闭时失效。

 

3、路径属性:网页脚本设置的 Cookie 默认仅对该网页所在文件夹及其子文件夹内的网页可见。例如,https://www.jb51.net/aa/1.html 设置的 Cookie 无法被 https://www.jb51.net/bb/2.html 访问。若希望全站共享,需设置 path=/,表示路径为网站根目录,从而允许所有网页访问。

4、域名属性:Cookie 无法跨域访问,通常仅供本站使用。若需在多个子域名间共享,需确保它们拥有相同的主域名,并通过设置 domain 属性实现。例如,若希望 www.jb51.net 和 bbs.jb51.net 共享 Cookie,需设置 domain=jb51.net。

5、加密传输:若 Cookie 带有 secure 属性,则在传输至服务器的过程中将采用加密方式传输。

 

 

Cookie 字符串编码处理

Cookie 字符串编码:

Cookie 字符串中不能包含空格、分号、逗号等特殊符号。若值中包含这些符号,可使用 encodeURIComponent() 函数对 Cookie 值进行编码,读取时再使用 decodeURIComponent() 函数转换回来,例如:document.cookie="key="+encodeURIComponent(value);。

  

服务器端 Cookie 安全设置

在服务器端设置 Cookie 并声明其私密性(Secure 及 HttpOnly):

出于安全考虑,可能需要限制部分 Cookie 的访问权限。

Secure:该 Cookie 仅供 HTTPS 安全连接使用。

HttpOnly:该 Cookie 仅供 HTTP 传输过程使用,JavaScript 无法访问该 Cookie。

例如,在 PHP 中使用内置函数 setcookie() 设置具有私密性限制的 Cookie:

setcookie("UserIDCookie","123456",time()+60*30,'/','mytest.com',false,true);

其中第六个参数表示是否仅供 HTTPS 连接使用,第七个参数 true 表示是否为 HttpOnly。

 

跨域请求与 P3P 策略

跨域请求及第三方 Cookie,以及 P3P(个人隐私保护策略):

浏览器的隐私设置(如 Chrome 的高级设置--内容设置)中,若禁止使用第三方 Cookie,则跨域请求(包括 iframe、img、JavaScript 文件等请求)无法发送属于该域的 Cookie。

例如,通过 iframe 引用跨域页面 https://www.jb51.net/index.html,即使浏览器中保存了属于 other.com 域名的名为 otherLoginFrag 的 Cookie,在 iframe 中请求该页面时,otherLoginFrag 并不会随请求发送至 www.other.com 的服务器。

不同浏览器对第三方 Cookie 的限制略有差异。例如,Safari 在禁用第三方 Cookie 时,Form 表单提交仅能通过 POST 方式提交 Cookie。

若希望在浏览器禁用第三方 Cookie 时仍能发送跨域请求的 Cookie,需在跨域服务器中使用 P3P 响应头预先声明允许发送的 Cookie。

代码如下:

 //php
header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
setcookie("UserIDCookie","123456");

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章