cookie各属性详解
-
Name: cookie名
-
Value: cookie值。
-
Domain: cookie的域名。Domain属性指定浏览器发出 HTTP 请求时,哪些域名要附带这个 Cookie。如果没有指定该属性,浏览器会默认将其设为当前 URL 的一级域名,比如www.example.com会设为example.com,而且以后如果访问example.com的任何子域名,HTTP 请求也会带上这个 Cookie。如果服务器在Set-Cookie字段指定的域名,不属于当前域名,浏览器会拒绝这个 Cookie。
-
Path: 允许读取cookie的url路径,一般设置为/。Path属性指定浏览器发出 HTTP 请求时,哪些路径要附带这个 Cookie。只要浏览器发现,Path属性是 HTTP 请求路径的开头一部分,就会在头信息里面带上这个 Cookie。比如,PATH属性是/,那么请求/docs路径也会包含该 Cookie。当然,前提是域名必须一致
-
Expires: cookie过期时间。不设置,则为Session会话期,页面退出时cookie失效。
-
Max-Age:指定从现在开始 Cookie 存在的秒数,比如60 * 60 * 24 * 365(即一年)。过了这个时间以后,浏览器就不再保留这个 Cookie。如果同时指定了Expires和Max-Age,那么Max-Age的值将优先生效
-
HttpOnly: 指定该 Cookie 无法通过 JavaScript 脚本拿到,主要是Document.cookie属性、XMLHttpRequest对象和 Request API 都拿不到该属性。这样就防止了该 Cookie 被脚本读到,只有浏览器发出 HTTP 请求时,才会带上该 Cookie。js只能读取未设置HttpOnly的cookie。
-
Secure: 指定浏览器只有在加密协议 HTTPS 下,才能将这个 Cookie 发送到服务器。另一方面,如果当前协议是 HTTP,浏览器会自动忽略服务器发来的Secure属性。该属性只是一个开关,不需要指定值。如果通信是 HTTPS 协议,该开关自动打开
-
SameSite: 限制第三方url是否可以携带cookie。有3个值:Strict/Lax(默认)/None。(chrome51新增属性)
- Strict: 仅允许发送同站点请求的的cookie
- Lax: 允许部分第三方请求携带cookie,即导航到目标网址的get请求。包括超链接 ,预加载和get表单三种形式发送cookie
- None: 任意发送cookie,设置为None,(需要同时设置Secure,也就是说网站必须采用https)
-
Priority:优先级,chrome的提案(firefox不支持),定义了三种优先级,Low/Medium/High,当cookie数量超出时,低优先级的cookie会被优先清除
- 设置cookie
/**
* 设置cookies
*@param string cname表示key
*@param string cvalue表示value
*@param number exdays 表示过期时间(exdays天后过期)
*/
function setCookie(cname, cvalue, exdays) {
var expires = "";
if(typeof exdays !== "undefined"){
var d = new Date();
d.setTime(d.getTime() + exdays * 24 * 60 * 60 * 1000);
expires = "expires=" + d.toUTCString();
}
document.cookie = cname + "=" + encodeURIComponent(cvalue) + "; " + expires + "; path =" + "/";
}
- 获取cookie
/**
*获取cookie,取不到返回空字符串
*@param string cname表示key
*/
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.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 decodeURIComponent(c.substring(name.length, c.length));
}
return "";
}