程序员好Web前端教程分享新手应该知道的Cookie知识! 1。cookies的出现 浏览器与服务器之间的通信少不了HTTP协议,但是由于HTTP协议是无状态的,服务器不知道浏览器上次做了什么样的操作,严重的阻碍了交互式网络应用程序的实现。 2.Cookie传输 在实现Cookie标准的过程中,服务器需要向任何HTTP请求发送Set-CookieHTTP头作为响应的一部分: 1.Set-Cookie:name=value;expires=Tue,03-Sep-201914:10:21GMT;path=/;domain=.xxx.com; 浏览器会存储这样一个cookie,并为后续的每个请求添加一个CookieHTTP请求头并将其发送回服务器: 1.Cookie:name=value 服务器验证cookie值以确定浏览器将请求发送给哪个用户。 3。浏览器中的Cookie 浏览器中的Cookie主要由以下部分组成: ·名称:cookie的唯一名称,必须进行URL编码。(重名会被覆盖) ·值:必须是URL编码。 ·domain:默认情况下cookie在当前域下有效,也可以设置该值来保证是否对其子域有效。 ·Path(路径):指定cookie在哪个路径下有效,默认为当前路径。 ·过期时间(expires):默认情况下,cookie会在浏览器会话结束时自动删除;您还可以设置一个GMT格式的日期来指定一个特定的删除日期;如果设置的日期是之前的日期,cookie将被立即删除。 ·安全标志(secure):指定后,只允许向https协议发送cookies。 浏览器在发送请求时,只会将名称和值添加到请求头的Cookie字段中,并发送给服务器。 浏览器提供了一个很烂的API来操作cookies: 1.document.cookie 上面的方法可以写cookie,每次只能写一个cookie字符串: 1.document.cookie='a=1;secure;path=/' 这个方法也可以用来读取cookie: 1.document.cookie//"a=1" 由于上面操作cookie的方法不够直观,所以一般会写一些函数来简化cookie的读取,设置和删除操作。 cookie设置操作需要以下几点: name和value的URL编码处理,即使用JavaScript中的encodeURIComponent()方法;expires要求日期以GMT格式传递,需要处理成更简单的写法,例如:设置秒数的方式;只注意安全属性名称; 每条信息都需要使用分号和空格。 1.functionsetCookie(key,value,attributes){ 2.if(typeofdocument==='undefined'){ 3.return 4.} 5.attributes=Object.assign({},{ 6.path:'/' 7.},attributes) 8. 9.let{domain,path,expires,secure}=attributes 10. 11.if(typeofexpires==='number'){ 12.expires=newDate(Date.now()+expires*1000) 13.} 14.if(日期实例过期){ 15.expires=expires.toUTCString() 16.}else{ 17.expires='' 18.} 19. 20.key=encodeURIComponent(key) 21.value=encodeURIComponent(value) 22. 23.letcookieStr=${key}=${value} 24. 25.如果(域名){ 26.cookieStr+=;域名=${域名} 27.} 28. 29.if(路径){ 30.cookieStr+=;路径=${路径} 31.} 32. 33.if(过期){ 34.cookieStr+=;expires=${expires} 35.} 36. 37.if(安全){ 38.cookieStr+=;secure 39.} 40. 41.return(document.cookie=cookieStr) 42.} Cookie读取操作需要注意name和value的URL解码处理,即在JavaScript中调用decodeURIComponent()方法: 1.functiongetCookie(name){ 2.if(typeofdocument==='undefined'){ 3.return 4.} 5.letcookies=[] 6.letjar={} 7.document.cookie&&(cookies=document.cookie.split(';')) 8. 9.for(leti=0,max=cookies.length;i
