Heim > Web-Frontend > js-Tutorial > Hauptteil

javascript怎么设置cookie

青灯夜游
Freigeben: 2023-01-05 16:09:41
Original
20025 人浏览过

在javascript中,可以使用document对象的cookie属性来设置、读取或删除cookie,语法“document.cookie="cookieName=Value;expires=过期时间";”。

javascript怎么设置cookie

本教程操作环境:windows7系统、javascript1.8.5版、Dell G3电脑。

1,什么是cookie

    把web页面加载到浏览器所使用的HTTP是一种"无状态"协议,也就是说,当服务器把页面发送给浏览器之后,它就认为事物完成了,并不保存任何信息。这给在浏览器会话期间维持某种连续性带来了困难,比如记录用户已经访问或下载过哪些内容,或是记录用户在私有区域的登录状态。

    cookie就是解决这个问题的一个途径。举例来说,cookie可以记录用户的最后一次访问,保存用户偏好设置的列表,或是当用户继续购物时保存购物车里的物品。在正确使用的情况下,cookie能够改善站点的用户体验。

    cookie本身是一些短小的信息串,能够由页面保存在用户的计算机上,然后可以被其他页面读取。cookie一般都设置为在一定时间后失效。

cookie的局限

    浏览器对于能保存的cookie数量有所限制,通常是几百个或多一点。一般情况下,每个域名20个cookies是允许的,而每个域最多能保存4KB的cookie。

    除了大小限制可能导致的问题,有很多原因都可能导致硬盘上的cookie消失,比如到达有效期了,或是用户清理cookie信息了,或是换用其他浏览器了。因此,永远都不应该使用cookie保存重要数据,而且在编写代码时一定要考虑到不能获取到所期望cookie时的情况

2,document.cookie属性

JavaScript使用document对象的cookie属性来创建 、读取及删除cookie。

每个cookie基本上就是一个由成对的名称和值组成的字符串,像下面这样:

username=sam
Nach dem Login kopieren

当页面加载到浏览器里,浏览器会收集与页面相关的全部cookie,放到类似字符串的document.cookie属性里。在这个属性里,每个cookie是以分号分隔的:

username=sam;location=China;
Nach dem Login kopieren

#我讲document.cookie称作"类似字符串"的属性,因为它并不是真正的字符串,只是在提取cookie信息时,这个属性表现得像个字符串而已

数据的编码和解码

某些字符不能在cookie里使用,包括分号,逗号以及空白符号(比如空格和制表符)。在把数据存储到cookie之前,需要对数据进行编码,以便于实现正确的存储。

在存储信息之前,使用JavaScript的escape()函数进行编码,而获得原始的cookie数据时就使用相应的unescape()函数进行解码。

excape()函数把字符串里任何非ASCII字符都转换为相应的2位或4为十六进制格式,比如空格转换为%20,&转换为%26。

举例来说,下面的代码会输出变量str里保存的原始字符串及escape()编码以后的结果:





hello owrld
Nach dem Login kopieren

可以看到空格被表示为%20,左括号是%28,右括号是%29。

3,cookie组成

document.cookie里的信息看上去就像是由成对的名称和值组成的字符串,每一对数据的形式是:

name=value
Nach dem Login kopieren

但实际上,每个cookie还包含其他一些相关信息,下面来分别介绍。

cookieName 和 cookieValue

cookieName和cookieValue就是在cookie字符串里看到的name=value里的名称和值。

domain

domain属性向浏览器指明cookie属于哪个域。这个属性是可选的,在没有指定时,默认值是设置cookie的页面所在的域。

这个属性的作用在于控制子域对cookie的操作。距离来说,如果设置其为www.example.com,那么子域code.example.com里的页面就不能读取这个cookie。但如果domain属性设置为example.com,那么code.example.com里的页面就能访问这个cookie了。

path

path属性指定可以使用cookie的目录。如果只想让目录documents里的页面设置cookie的值,就把path设置为/documents。这个属性是可选的,常用的默认路径是/,表示cookie可以在整个域中使用。

secure

secure属性是可选的,而且几乎很少使用。它表示浏览器在把整个cookie发送给服务器时,是否应该使用SLL安全标准。

expires

每个cookie都有一个失效日期,过期就自动删除了。expires属性要以UTC时间表示。如果没有设置这个属性,cookie的生命期就和当前浏览器会话一样长,会在浏览器关闭时自动删除。

4,编写cookie

要编写新的cookie,只要把包含所需属性的值赋予document.cookie就可以了:

document.cookie = "username=sam;expires=15/05/2018 00:00:00"
Nach dem Login kopieren

使用javascript的Date对象可以避免手工输入日期和时间格式;

var cookieDate = new Date(2018,05,15);
document.cookie = "username=sam;expires="+cookieDate.toUTCString();
Nach dem Login kopieren

这样就能达到和前面一样的结果。

#注意这里使用了cookieDate.toUTCString()函数,而不是cookieDate.toString();这是因为cookie的时间要以UTC格式设置。

在实际编码时,应该用excape()函数来确保在给cookie赋值时不会有非法字符:

var cookieDate = new Date(2018,05,15);
var user = "Sam Jones";
document.cookie = "username="+excape(user)+";expires="+cookieDate.toUTCString();
Nach dem Login kopieren

5,编写cookie的函数

很自然就会想到编写一个函数专门用于生成cookie,完成编码和可选属性的组合操作。下面的程序清单就列出了一个这样的程序代码:

function createCookie(name,value,days,path,domain,secure){
	if(days){
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = date.toGMTString();
		}
		else var expires = "";
		cookieString = name + "=" +excape(value);
		if(expires) cookieString += ";expires=" +expires;
		if(path) cookieString += ";path=" + escape(path);
		if(domain) cookieString += ";domain=" + escape(domain);
		if(secure) cookieString += ";secure=" + escape(secure);
		document.cookie = sookieString;
		}
Nach dem Login kopieren

    这个函数的执行的操作是相当直观的,name和value参数组合得到"name = value",其中的value还经过编码以避免非法字符。

    在处理有效期时,使用的参数不是具体日期,而是cookie有效的天数。函数根据这个天数生成有效的日期字符串。

    其他属性都是可选的,如果设置了,就会附加到组成cookie的字符串里。

【推荐学习:javascript高级教程

以上是javascript怎么设置cookie的详细内容。更多信息请关注PHP中文网其他相关文章!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!