关于Cookie的那些事

1 Cookie简介

Cookie是由W3C构造提出,最早由NetScape社区发展的一种机制。Cookie是存储于接见者的计算机中的变量。每当统一台计算机经由过程浏览器要求某个页面时,就会发送这个cookie。实在cookie是一个很小的文本文件,是浏览器贮存在用户的机械上的。Cookie是纯文本,没有可执行代码。贮存一些效劳器须要的信息,每次要求站点,会发送相应的cookie,这些cookie能够用来分辨用户身份信息等作用。cookie能够包括恣意的信息,客户端会纪录效劳器返返来的Set-Cookie首部中的cookie内容。并将cookie存储在浏览器的cookie数据库中,当用户接见统一站点时,在Cookie要求首部发送过去。

2 JavaScript操纵cookie

JavaScript 能够运用 document.cookie 属性来建立 、读取、及删除 cookie。
JavaScript 中,建立 cookie 以下所示:

document.cookie="username=John Doe";

您还能够为 cookie 增加一个逾期时刻(以 UTC 或 GMT 时刻)。默许情况下,cookie 在浏览器封闭时删除:

document.cookie="username=John Doe; expires=Thu, 18 Dec 2043 12:00:00 GMT";

您能够运用 path 参数通知浏览器 cookie 的途径,domain 参数通知浏览器 cookie 的域名。默许情况下,cookie 属于当前页面。

document.cookie="username=John Doe; expires=Thu, 18 Dec 2043 12:00:00 GMT; path=/; domain= .abc.com";

在 JavaScript 中, 能够运用以下代码来读取 cookie:

var x = document.cookie;

document.cookie 将以字符串的体式格局返回一切的 cookie,范例花样: cookie1=value; cookie2=value; cookie3=value;

3 关于cookie的domain

domain的寄义为域。假设有两个域名
域名A a.b.e.f.com.cn
域名B c.d.e.f.com.cn
域名有分级的观点,也就是说域名A与域名B都是f.com.cn的子域名,f.com.cn又是com.cn的子域名
在域名A所运用的效劳中,能够设置域名
a.b.e.f.com.cn
b.e.f.com.cn
e.f.com.cn
f.com.cn
在效劳端设置domain的时刻,设置domain为b.e.f.com.cn或.b.e.f.com.cn没有区分,注重前面的点,即只假如为cookie显式的声明domain,前面带不带点没有区分。这个点的玄妙背面还会提到。
设置其他域名虽然能够在相应头中有set-cookie的头,然则出于平安斟酌,该头会被浏览器疏忽,并不会发生实在的cookie,有一点注重,虽然在域名上来讲,f.com.cn是com.cn的子域,然则浏览器是不会吸收domain为com.cn的cookie的,那样互联网就乱套了。
关于域名A下的cookie,域名B能够拿到e.f.com.cn,f.com.cn这两个domain下的cookie,互联网上说的单点登录,就是以这个道理完成的。
假如存在相同名的cookie差别domain呢?
比方域名A设置设置domain为e.f.com.cn的cookie,mykey=myvalue1。
而在域名B中设置domain为c.d.e.f.com.cn的cookie,mykey=myvalue2。
此时在域名B效劳端能拿到两个cookie都为mykey=myvalue,并不存在掩盖一说。
注重在域名B中假如设置domain为e.f.com.cn的cookie,mykey=myvalue3.此时会掩盖域为e.f.com.cn的mykey的值,即浏览器中,统一个域,只存在一个名为mykey的cookie。假如不显式设置cookie,默许当前域名这类说法对不对呢? 先说第一个题目,假如不显现设置cookie,那末浏览器会天生一个只针对当前域名的cookie,什么叫只针对当前域名呢?假如有一个域名就是e.f.com.cn,在该域名下设置的cookie假如没有显现domain,在回写浏览器的时刻浏览器会特别处置惩罚,假如是火狐,你会发现该cookie的信息,有一个主机项,而域项消逝了,在chrome中,虽然有域这个项,然则域的前面少了一个点,就是上面所说的,假如显现声明,不论域中带不带点,到chrome中,都是带点存储的,只要非显式声明域的cookie,浏览器存储才是不带点的,题目就在这,在e.f.com.cn效劳主机中天生的cookie,只要e.f.com.cn的效劳器能拿到,此时子域名是拿不到这个cookie的。、

扩大

关于前后端涉及到的跨域题目能够查找withCredentials相干材料
口试题目常常问到的关于cookie的题目 cookie与session区分 cookie与 localstorage区分

    原文作者:小葱
    原文地址: https://segmentfault.com/a/1190000018530346
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞