Cookie 是浏览器接见服务器后,服务器传给浏览器的一段数据。
cookie是http协定的一部份,当客户端第一次向服务器端发送要求的时刻,服务器会向客户端发送一个 cookie,用来保留一些信息,当客户端下次在向同一个服务器发送要求的时刻,服务器经由过程辨认客户端的cookie,做出相应的行动。比方我们上岸一个网站的时刻,这个网站纪录我们的用户名和暗码,下次上岸就不必再输入用户名和暗码就能够直接登录了。
Web 服务器经由过程发送一个 Set-Cookie 的 HTTP 音讯头来建立一个 cookie,Set-Cookie音讯头是一个字符串,其花样以下:
Set-Cookie: NAME=VALUE;Expires=DATE;Path=PATH;Domain=DOMAIN_NAME;SECURE
在chrome掌握台中,我们能够经由过程开发者东西来检察服务器相应要求后发送给浏览器的http音讯头,从而看到set-cookie,具体步骤以下:F12翻开开发者东西→Network
同样在开发者东西中,能够经由过程Application检察服务器发送了哪些cookie:
NAME:cookie的称号,value是设置的cookie的值。
Expires:肯定Cookie有用停止日期,指定 cookie 在什么时刻不会再被发送到服务器,在这个指定时候后浏览器将会删除这个 cookie。DATE属性值必需根据特定的花样:Wdy(周几), Date-Month-Year HH:MM:SS GMT ,假如不是这类花样将不会被辨认。在没有设置 expires 选项时,cookie 的生命周期仅限于当前会话中,封闭浏览器 cookie文件会自动消逝。
Path:掌握 Cookie 音讯头的发送机遇,用户要求资本 URL 中存在Path指定的途径时,Web服务器才会发送Cookie 音讯头。平常假如用户输入的URL中的途径部份从第一个字符最先包含Path属性所定义的字符串,浏览器就以为经由过程搜检。假如Path属性的值为“/”,则Web服务器上一切的WWW资本都可读取该Cookie。假如没有设置path选项,则Path的属性值默以为Web服务器传给浏览器的资本的途径名。
Domain:肯定哪些Internet域中的Web服务器可读取浏览器所存取的Cookie,即只要来自这个域的页面才够运用Cookie中的信息。未设置Domain选项时,设置Cookie的属性值为该Web服务器的域名。
须要注重的是,只要在 domain 选项核实终了今后才会对 path 属性举行比较。
SECURE:只要标记没有值,只要当一个要求经由过程 SSL 或 HTTPS 建立时,包含 secure 选项的 cookie 才被发送至服务器。表明只要当浏览器和Web 服务器之间的通信协定为加密认证协定时,浏览器才向服务器提交相应的Cookie。
在JavaScript中,cookie用于保留状况以及为web浏览器供应一种身份辨认机制。在 JavaScript 中我们能够经由过程 document.cookie 属性来建立、保护和删除 cookie 。
设置cookie:
document.cookie="userName = mavis ";
每一个cookie都是一个 name/value对,若要一次设置多个name/value对,能够用下面的要领:
document.cookie = "userName=mavis; userId = 023";
在cookie中,运用escape()函数举行编码,它能将一些特殊符号运用十六进制示意,特殊符号有分号(;)、逗号(,)、等号(=)以及空格等。然则运用escape()编码后,在掏出值今后须要运用unescape()举行解码才获得本来的cookie值。
JavaScript中escape() 函数可对字符串举行编码,如许就能够在一切的盘算机上读取该字符串。语法以下:escape(string)
,string为要被转义或编码的字符串。
猎取cookie的值:
运用document.cookie可直接获得由分号离隔的多个name/value(名/值)构成的字符串。这些名/值对包含该域名下的一切cookie。
var myCookie = document.cookie;
猎取指定的cookie值,
//设置两个cookie
document.cookie = "userName=mavis";
document.cookie = "userId = 023";
//猎取cookie字符串
var myCookie = document.cookie;
var arrCookie = myCookie.split(";");
var userName;
for(var i = 0;i < arrCookie.length;i++){
var myArr = arrCookie[i].split("=");
//找到称号为userName的cookie,并返回值
if(userName = myArr[0]){
userName = myArr[1];
break;
}
}
alert("welcome " + userName);
设置cookie的有用停止日期:
当我们第一次在某个网站登录我们的ID是,有的网站会提示是不是保留该ID和暗码,在JavaScript中,实际上是给cookie设置一个有用日期:
document.cookie = "userId = 023; expiress = GMT_String";
这条语句是将userId这个cookie设置为GMT_String示意的逾期时候,假如凌驾这个时候,cookie将会消逝,不能够再被接见。
设置cookie值在30天今后逾期:
//猎取当前时候
var date=new Date();
var expiresDays=30;
//将date设置为30天今后的时候
date.setTime(date.getTime()+expiresDays*24*3600*1000);
//将userId和userName两个cookie设置为30天后逾期
document.cookie = "userId = 023; userName = mavis; expires = " + date.toGMTString();
删除cookie:
可将其有用停止日期设置为过去的时候:
var date=new Date();
//将date设置为过去的时候
date.setTime(date.getTime()-10000);
document.cookie="userId=023; expires="+date.toGMTString();
如许就能够把userId这个cookie删除了。
指定可接见cookie的途径:经由过程设置path属性来指定
//指定可接见该cookie的目次
document.cookie = "name = mavis; path = cookiePath"
//在全部网站都可接见
document.cookie = "name = mavis; path = /"
指定可接见cookie的主机名:主机名是指同一个域下的差别主机,一个主机中建立的cookie在另一个主机下是不能被接见的,但能够经由过程domain参数来完成对其的掌握。
如:document.cookie="name=value;domain=.baidu.com";
如许设置可以使百度下的一切主机都可接见该cookie。
一个例子:
function getCookie(name){
if (document.cookie.length>0){
start=document.cookie.indexOf(name + "=")
if (start!=-1){
start=start + name.length+1
end=document.cookie.indexOf(";",start)
if (end==-1) end=document.cookie.length
return unescape(document.cookie.substring(start,end))
}
}
return ""
}
function setCookie(name,value,expiredays){
var exdate=new Date()
exdate.setDate(exdate.getDate()+expiredays)
document.cookie=name+ "=" +escape(value)+((expiredays==null) ? "" : ";expires="+exdate.toGMTString())
}
setCookie("username","tank",1800); //设置cookie的值,生计时候半个小时
alert(getCookie('test')); //获得cookie的值,显现tank
然则在运转的时刻出了个题目,在我的chrome浏览器上不能显现:
因而我上网查了以下缘由,是因为chrome浏览器对cookie有限定,然则我给chrome浏览器的cookie已设置成“许可设置当地数据”,但照样不可。看到这篇文章的大神,谁能给我讲讲这是为啥吗?感激涕零。
在edge浏览器上显现出来是如许的:
末了,途经的大神们,求你们帮助解答一下chrome上不能实行的题目,感谢啦~~~~