设置,获取,删除cookie
HTTP cookie,通常直接叫做 cookie ,服务器对任意HTTP请求可以发送 “Set-Cookie” 响应头,key=value 形式传送,以分号空格相隔“; ”,但key,value都必须是经过URL编码。
客户端向服务器请求,如果设置了cookie,在同源请求中会自动带上cookie有 “Cookie”请求头,key=value 形式传送,以分号空格相隔“; ”。但在跨域请求时,不会自动带 cookie,比如在 xhr 跨域,可以通过XMLHttpRequest.withCredentials为true, 后端设置Header的方式让ajax自动带上不同源的cookie。
cookie 的组成:
名称 key :一个唯一确定的cookie名称,cookie名称不区分大小写;
值 value:cookie字符串值
域 domain:cookie对于那个域是有效的
路径 path:指定域中的哪个路径访问cookie,并在请求时发送cookie。例如,指定路径为 http://www.example.com/a,那么 http://www.example.com,http://www.example.com/b 等就不能访问到cookie,但 http://www.example.com/a/aa 能
失效时间 expires:表示cookie 合适被删除的时间戳,默认会在浏览器回话结束是删除所有cookie,如果设置的时间是以前的时间,则cookie会被删除
安全标志 ‘secure’,指定后,只有在使用SSL连接(https)的时候才会发送cookie 到服务器
在Javascript 中, 使用BOM 的document.cookie 属性来处理cookie 。
当用于读取cookie时,返回当前页面可用的所有cookie字符串,以分号空格 分隔。 “name1=value1; name2=value2”
当用于设置cookie时,document.cookie 可以设置为一个新的“key=value”字符串,这样就可以新添加到现有的cookie集合中,且并不会覆盖之前的非同名的cookie,如果之前有同名的cookie,会更新值。
function setCookie(key,value,options){ if (value !== undefined ) { if(options === undefined || options==""){ options={}; } if (typeof options.expires === 'number') { var days = options.expires, t = options.expires = new Date(); t.setTime(+t + days * 864e+5); } return (document.cookie = [ encodeURIComponent(key), '=', encodeURIComponent(value), options.expires ? '; expires=' + (options.expires).toUTCString() : '', // use expires attribute, max-age is not supported by IE options.path ? '; path=' + options.path : '', options.domain ? '; domain=' + options.domain : '', options.secure ? '; secure' : '' ].join('')); } } function getCookie(key){ var result = key ? undefined : {}; var cookies = document.cookie ? document.cookie.split('; ') : []; for (var i = 0, l = cookies.length; i < l; i++) { var parts = cookies[i].split('='); var name = decodeURIComponent(parts.shift()); var cookie = decodeURIComponent(parts.join('=')); if (key && key === name) { result = cookie; break; } } return result; } function removeCookie(key,options){ if (getCookie(key) === undefined) { return false; } options.expires=-1; setCookie(key,getCookie(key),options); } setCookie("cookie1","value1",{expires:1,path:"/"}); setCookie("cookie2","value2",{expires:1,path:"/"}); removeCookie("cookie1",{path:"/"}); removeCookie("cookie2",{path:"/"}); console.log(getCookie("cookie1")); console.log(getCookie("cookie2"));
http://www.cnblogs.com/Darren_code/archive/2011/11/24/Cookie.html
https://www.cnblogs.com/gg1234/p/5611086.html
cookie的 domain 和 path
一、domain:
- 设置cookie——设置cookie的时候,domain要符合域名的规则,比如可以设置成www1.pclady.com.cn和pclady.com.cn 但是不能设置成pclady。要有.com.cn或者其他域名做结尾。 通过js手动设置cookie的domain都是以.开头的。比如设置domain=pclady.com.cn,实际的domain名为.pclady.com.cn;删除cookie时加不加.都可以。
- 获取cookie——js只能获取domian大于等于当前页面域名的cookie。比如http://www1.pclady.com.cn/zt/20160623/testCookie.html页面中的js能获取domain为“www1.pclady.com.cn”和“.www1.pclady.com.cn”和“.pclady.com.cn”但是获取不到“g.pclady.com.cn”中的cookie;
- 删除cookie——要删除一个cookie,domain值必须跟要删除cookie的domain相同,默认的domain为html文件的domain。
- 跨域domain——js不可以把cookie设置成不同与html域名的domian。cookie设置不会成功,但不会影响后面程序对cookie的操作。
- 错误——如果domain设置错误,该cookie将不会被创建,并且后续对cookie的操作不论正确与否都会被浏览器禁止。
二、path:
- 设置cookie——js设置path要以"/"开头,比如html路径为"/zt/20160623/",路径可以设置成"/"或"/zt"。
- 获取cookie——使用js只能获取path大于等于当前页面path的cookie,比如html路径为/zt/20160623/,使用js只能获取“/zt/20160623/”和“/zt”和“/”路径下的cookie。不能获取其他路径下的cookie
- 删除cookie——删除cookie的时候路径也必须相同,默认的路径是html的path路径。
- 错误——如果path不是以"/"开头的则创建cookie的path使用默认的path;如果是以"/"开头但是设置错了,路径名不存在或者直接设置成子路径。比如设置成"/20160623"或者"/zt1",该cookie将不会被创建,并且后续对cookie的操作不论正确与否都会被浏览器禁止。path的值是该页面URL路径中的值,如果不是,cookie将不会被创建。

浙公网安备 33010602011771号