资讯专栏INFORMATION COLUMN

关于Cookie的那些事

alogy / 3025人阅读

摘要:假设有两个域名域名域名域名有分级的概念,也就是说域名与域名都是的子域名,又是的子域名在域名所使用的服务中,可以设置域名在服务端设置的时候,设置为或没有区别,注意前面的点,即只要是为显式的声明,前面带不带点没有区别。

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://www.ucloud.cn/yun/53866.html

相关文章

  • 关于Cookie那些

    摘要:假设有两个域名域名域名域名有分级的概念,也就是说域名与域名都是的子域名,又是的子域名在域名所使用的服务中,可以设置域名在服务端设置的时候,设置为或没有区别,注意前面的点,即只要是为显式的声明,前面带不带点没有区别。 1 Cookie简介 Cookie是由W3C组织提出,最早由NetScape社区发展的一种机制。Cookie是存储于访问者的计算机中的变量。每当同一台计算机通过浏览器请求某...

    sf_wangchong 评论0 收藏0
  • cookie和session那些

    摘要:服务器生成的用以标识客户信息的一般被称为而通过一些手段获取其它用户的攻击就叫劫持设置一个搞掂了 cookie history cookie最初是由网景公司开发的,现在所有主要的浏览器都支持它. type cookie分为两种:会话cookie和持久cookie. 会话cookie是一种临时的cookie,它记录用户的访问站点的设置偏好.用户在退出浏览器就会被删除. 持久cookie是存...

    xiaoxiaozi 评论0 收藏0
  • cookie和session那些

    摘要:服务器生成的用以标识客户信息的一般被称为而通过一些手段获取其它用户的攻击就叫劫持设置一个搞掂了 cookie history cookie最初是由网景公司开发的,现在所有主要的浏览器都支持它. type cookie分为两种:会话cookie和持久cookie. 会话cookie是一种临时的cookie,它记录用户的访问站点的设置偏好.用户在退出浏览器就会被删除. 持久cookie是存...

    hedzr 评论0 收藏0
  • cookie和localStorage那些

    摘要:它的大小限制为左右,是网景公司的前雇员在年月的发明。字符串转义通过来设置的有效期。和的用法和属性允许在浏览器中存储对的数据。用于临时保存同一窗口或标签页的数据,在关闭窗口或标签页之后将会删除这些数据。是浏览器关闭后就立即清除。 一、localStorage、cookie、sessionStorage的区别与练习 showImg(https://segmentfault.com/img/...

    Jeffrrey 评论0 收藏0
  • 我们来聊聊Cookie、Session和Storage那些

    摘要:目的是克服由所带来的一些限制,当数据需要被严格控制在客户端时,不需要持续的将数据发回服务器。的生命周期是在仅在当前会话下有效。但是在关闭了浏览器窗口后就会被销毁。删除单个数据,根据键值移除对应的信息。 导语 我们在做项目的时候,经常把Cookie和Session挂在嘴边,可实际对于他们了解的也是很少,只是会使用,但这远远不够,熟练的掌握他们的特性才能把项目做的更好。下面我们就来认识一下...

    ytwman 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<