Cookie操作是前端开发过程中经常遇到的。当然,如果只是用来存储一些简单的用户数据,还是比较简单的。我们需要做的可能是设置cookie的名称、值、过期时间等。我们只需要根据cookie名称读取相应的cookie值。在复杂的应用中,这些肯定是不够的。
cookie的属性
除了名称和值之外,cookie还有以下可选属性,用于控制cookie的有效期、范围和安全性:
过期属性
指定了cookies的生存期。默认情况下,cookies暂时存在。它们存储的值仅在浏览器会话期间存在,当用户退出浏览器时,这些值将会丢失。如果希望cookies存在一段时间,应该将expires属性设置为以毫秒表示的未来过期日期或时间点。过期默认为器械包的当前过期时间。现在已经被max-age属性代替,max-age属性设置cookie的生存期,以秒为单位。
如果最大年龄属性为正,这意味着cookie将在最大年龄秒后自动过期。浏览器将保存具有正最大年龄的cookie,即,将它们写入相应的cookie文件。无论客户是关闭浏览器还是关闭计算机,只要cookie在最大年龄秒之前,它在登录网站时仍然有效。
如果max-age为负,则表示cookie只在该浏览器窗口和该窗口中打开的子窗口有效,关闭窗口后cookie将无效。最大年龄为负的cookie是临时cookie,不会持久化或写入cookie文件。Cookie信息保存在浏览器内存中,因此浏览器关闭时cookie会消失。cookie的默认最大年龄值为-1。
如果最大年龄为0,则删除该cookie。Cookie机制没有提供删除cookie的方法,所以可以通过设置cookie立即过期来达到删除cookie的效果。浏览器将从cookie文件或内存中删除过期的cookie。
如果您没有设置过期或最长期限,默认情况下,cookie是会话,也就是说,当您关闭浏览器时,cookie会消失。
这里需要说明的是,Session的cookie在ie6下,如果用户跳转打开页面或者打开新窗口(包括target = "_ blank "并且用鼠标右键打开新窗口),都在同一个Session中。如果用户打开一个新的浏览器程序或进程,然后打开当前页面,则不是同一个会话。只要您的会话存在或者是同一个会话,其他浏览器就可以共享cookie。前段时间在ie6项目下我吃了大亏。
域属性
域属性使多个web服务器能够共享cookie。域属性的默认值是创建cookie的服务器的主机名。您不能将cookie的域设置为服务器所在域以外的域。
例如,a.sodao.com的服务器可以读取b.sodao.com设置的cookie值。如果b.sodao.com的页面创建的cookie将其路径属性设置为“/”,域属性设置为“. sodao.com”,那么b.sodao.com的所有页面、a.sodao.com的所有页面以及sodao.com域的其他服务器上的页面都可以访问该cookie。
路径属性
它指定与cookie关联的网页。默认情况下,cookie与创建它们的网页、同一目录下的网页以及同一目录下子目录下的网页相关联
保护财产
是一个布尔值,指定如何在网络上传输cookie,默认不安全,通过普通http连接传输;
HttpOnly属性
HttpOnly属性限制了HTTP请求的cookie范围。特别是,该属性指示用户代理忽略以“非HTTP”方式对cookie的访问(例如浏览器向js公开的接口)。请注意,HttpOnly属性和Secure属性是相互独立的:cookie可以是HttpOnly属性,也可以是Secure属性。
在前一段时间的项目中,我用js读取了一个cookie,但是无法获得这个值。最后花了将近2个小时验证cookie是httpOnly,真是悲剧。
cookie的传输
浏览器以名称-值对的形式在本地存储cookie信息。每当请求新文档时,浏览器都会发送cookies,以便服务器可以通过HTTP请求跟踪客户。所以,从WEB性能的角度来说,应该尽量减少cookie,使传输性能最大化。
cookie的编码和解码
由于cookie name/value中的值不允许包含分号、逗号、空字符,为了最大化用户代理和服务器之间的兼容性,任何存储为cookie值的数据都要进行编码,比如js全局函数encodeURIComponent的编码和解码,这是我们在前端熟悉的。
1.《cookie设置 前端开发中Cookie详解》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《cookie设置 前端开发中Cookie详解》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/shehui/1069849.html