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

前端页面cookie使用规范

时间:2023-04-02 14:31:19 HTML

cookie是存储在浏览器中的字符串数据,是HTTP协议的一部分。Cookie通常由Web服务器使用响应头字段Set-Cookie设置。然后浏览器自动将需要的cookie数据添加到请求头字段Cookie中。cookie的一个常见使用场景是身份验证:登录后,服务器使用响应中的Set-CookieHTTP-header来设置具有唯一“会话标识符”的cookie数据。下次将请求发送到同一域时,浏览器会使用CookieHTTP标头通过网络发送cookie数据。所以服务器会知道用户的身份。另外,在浏览器中,也可以使用document.cookie来读取或设置cookie数据。读取cookiedocument.cookie返回一个包含页面中所有有效cookie的字符串(根据域、路径、过期时间和安全设置),以分号分隔,如下例:name1=value1;name2=value2;name3=Allnames而value3的值是经过URL编码的,所以必须使用decodeURIComponent()对其进行解码。辅助函数:classCookieUtil{staticget(name){letcookieName=`${encodeURIComponent(name)}=`,cookieStart=document.cookie.indexOf(cookieName),cookieValue=nullif(cookieStart>-1){letcookieEnd=document.cookie.indexOf(';',cookieStart)if(cookieEnd==-1){cookieEnd=document.cookie.length}cookieValue=decodeURIComponent(document.cookie.substring(cookieStart+cookieName.length,cookieEnd))}returncookieValue}}Setcookie通过document.cookie属性设置新的cookie字符串。该字符串在解析后将添加到原始cookie中。设置document.cookie不会覆盖任何预先存在的cookie,除非设置了现有的cookie。设置cookie的格式如下:name=value;过期=过期时间;路径=域路径;域名=域名;安全//或名称=值;最大年龄=最大年龄时间;路径=域路径;域名=域名;secure在所有这些参数中,只有cookie的名称和值是必需的,名称和值必须使用encodeURIComponent()进行编码。可选字段expires,max-age默认情况下,如果一个cookie没有设置这两个参数中的任何一个,关闭浏览器后cookie数据将被删除。这些cookie称为“会话cookie”。为了控制cookie的有效期,需要设置expires或者max-age。expires:定义cookie过期的时间,时间为GMT格式(date.toGMTString())。max-age:定义cookie的有效时间,纯数字,单位秒。pathpath必须是绝对路径。它使该路径下的所有页面都可以访问cookie。默认为当前路径。如果cookie设置了path=/admin,则该cookie将在/admin和/admin/something下可见,但在/home或/adminpage下不可见。一般情况下,我们应该将路径设置为根目录:path=/,使cookie对本站所有页面可见。Tips:设置cookie的路径时,可以是任意绝对路径,不受当前页面URL路径影响,均有效。domaincookie有效域。(域名不包含协议和端口)所有发送到该域的请求都会包含相应的cookie。该值可能包含也可能不包含子域(例如www.wrox.com)或不包含(例如.wrox.com表示对wrox.com的所有子域都有效)。如果未明确设置,则默认为设置cookie的当前页面的域。Tips:设置cookie的路径时,必须符合当前页面URL路径的层级关系;当前页面URL-http://login.baidu.com,可以设置域名为login.baidu.com或baidu.com,但设置域名为www.baidu.com或www.sina.com.cn是无效的。securecookie默认不区分协议,http协议和https协议都可以使用cookie数据。当设置cookie的数据中有secureflag时,只有https协议才能使用这段cookie数据。辅助函数类CookieUtil{staticset(name,value,expiresOrMaxAge,path,domain,secure){letcookieText=`${encodeURIComponent(name)}=${encodeURIComponent(value)}`if(expiresOrMaxAgeinstanceofDate){cookieText+=`;expires=${expiresOrMaxAge.toGMTString()}`}elseif(typeofexpiresOrMaxAge==='number'){cookieText+=`;max-age=${expiresOrMaxAge}`}如果(路径)cookieText+=`;path=${path}`if(domain)cookieText+=`;domain=${domain}`if(secure)cookieText+=';secure'document.cookie=cookieText}}删除cookie而不直接删除已有cookie的方法。为此,需要重新设置具有相同名称(包括相同的路径、域和安全选项)的cookie,但过期时间设置为过去的某个时间。CookieUtil.unset()方法实现了这些过程。此方法有4个参数:要删除的cookie的名称、可选路径、可选域和可选安全标志。classCookieUtil{staticunset(name,path,domain,secure){CookieUtil.set(name,'',newDate(0),path,domain,secure)}}练习自己尝试summarydocument.cookie提供对cookie的支持使用权。写操作只会修改其中提到的cookie。名称/值必须进行编码。一个cookie不能超过4KB。每个域最多允许20+左右的cookie(取决于浏览器)。Cookie选项:expires或max-age设置cookie过期时间。如果未设置,cookie将在浏览器关闭时过期。path=/,默认为当前路径,这样cookie只在该路径下可见。domain=site.com,默认cookie只在当前域下可见。如果明确设置域,则也可以使cookie在子域下可见。secure使cookie仅在HTTPS下有效。在大多数场景下,cookie中存储的是用户的身份信息,由后台接口读写。前端页面很少操作cookie数据,只是偶尔读写cookie。为此特写一篇文章详细记录cookies在浏览器中的使用规范。