当前位置: 首页 > Web前端 > HTML

Cookie那些事儿

时间:2023-04-02 19:02:11 HTML

1Cookie简介Cookie是由W3C组织提出,NetScape社区最先开发的一种机制。Cookie是存储在访问者计算机上的变量。每次同一台计算机通过浏览器请求某个页面时,都会发送此cookie。事实上,cookie是浏览器存储在用户机器上的一个小文本文件。Cookie是纯文本,没有可执行代码。存储服务器需要的一些信息。每次请求站点时,都会发送相应的cookie。这些cookies可用于识别用户身份信息等功能。cookie可以包含任何信息,客户端会在服务器返回的Set-Cookie头中记录cookie内容。并将cookie存储在浏览器的cookie数据库中,当用户访问同一站点时,在Cookie请求头中发送。2JavaScript操作cookieJavaScript可以使用document.cookie属性来创建、读取和删除cookie。在JavaScript中,创建cookie如下所示:document.cookie="username=JohnDoe";您还可以向cookie添加过期时间(UTC或GMT时间)。默认情况下,cookie在浏览器关闭时被删除:document.cookie="username=JohnDoe;expires=Thu,18Dec204312:00:00GMT";可以使用path参数告诉浏览器cookie的路径,domain参数告诉浏览器cookie的域名。默认情况下,cookie属于当前页面。document.cookie="username=JohnDoe;expires=2043年12月18日星期四12:00:00GMT;path=/;domain=.abc.com";在JavaScript中,可以使用以下代码读取cookie:varx=document.cookie;document.cookie将以字符串的形式返回所有cookie,类型格式:cookie1=value;cookie2=值;cookie3=value;3cookie的domaindomain的意思是domain。假设有两个域名域名Aa.b.e.f.com.cn域名Bc.d.e.f.com.cn域名有层级概念,也就是说域名A和域名B都是f.com.cn的子域名,而f.com.cn是com对于域名A使用的服务中.cn的子域名,可以设置域名a.b.e.f.com.cnb.e.f.com.cne.f.com.cnf.com.cn在服务器端设置域时,将域名设置为b.e.f.com。cn和.b.e.f.com.cn没有区别。注意前面一点,只要为cookie显式声明domain,前面加不加点都没有区别。这一点的奥妙,后面会提到。设置其他域名可以在响应头中有一个set-cookie头,但是出于安全考虑,这个头会被浏览器忽略,不会生成真正的cookie。需要注意一件事,尽管就域名而言,f.com.cn是com.cn的子域,但是浏览器不会接受域为com.cn的cookies,互联网就会乱了。对于域名A下的cookie,域名B可以获得e.f.com.cn和f.com.cn这两个域名下的cookie。Internet上的单点登录就是基于这个原理实现的。如果存在同名不同域的cookie怎么办?比如设置域名A,设置域名为e.f.com.cn的cookie,mykey=myvalue1。并在域名B中设置域名为c.d.e.f.com.cn的cookie,mykey=myvalue2。此时在域名B服务器上能获取到的两个cookie都是mykey=myvalue,并没有覆盖。注意,如果在域名B中设置域为e.f.com.cn的cookie,则mykey=myvalue3。此时会覆盖域为e.f.com.cn的mykey的值,即在浏览器中,同域下只有一个名为mykey的值。饼干。如果没有显式设置cookie,是不是说当前域名是默认的?先说第一个问题。如果不显示cookie,则浏览器只会为当前域名生成一个cookie。什么只针对当前域名?如果有域名e.f.com.cn,如果域名下设置的cookie没有显示域名,浏览器会在回写给浏览器时做特殊处理。如果是Firefox,你会发现cookie信息。有一个宿主项,但域项消失了。在chrome中,虽然有domain项,但是domain前面少了一个点,就是我上面说的。它是用点存储的。只有具有未明确声明域的cookie才会在浏览器中不带点存储。这就是问题。在e.f.com.cn服务主机中生成的cookies只能由e.f.com.cn服务器存储。搞定,此时子域名是拿不到这个cookie的。,Extension前后端涉及到的跨域问题,可以找withCredentials的相关资料。面试题中经常问到的关于cookie的问题cookie和session的区别cookie和localstorage的区别