收藏本站|设为首页

您现在的位置: 首页 > 新闻中心 > 建站经验 > 详细内容

前端开发中Cookie那些事儿

2012-09-05 09:44 来源: 卓杰科技 www.zhuojie.cc [ ]

文章来历:搜道UED

前段时刻做了项目,在前端实现中频仍的操作cookie,记实几点供巨匠参考!

expires属性

cookie的属性

除了name(名)和value(值),cookie还有以下一些可选属性,用来节制cookie的有用期,浸染域,平安性等:


  例如让位于a.sodao.com的处事器能够篡夺b.sodao.com设置的cookie值。如不美观b.sodao.com的页面建树的cookie把它的path属性设置为"/",把domain属性设置成".sodao.com",那么所有位于b.sodao.com的网页和所有位于a.sodao.com的网页,以及位于sodao.com域的其他处事器上的网页都可以访谒这个cookie。

如不美观max-age为负数,则暗示该cookie仅在本浏览器窗口以及本窗口打开的子窗口内有用,封锁窗口后该cookie即失踪效。max-age为负数的Cookie,为姑且性cookie,不会被持久化,不会被写到cookie文件中。cookie信息保留在浏览器内存中,是以封锁浏览器该cookie就消逝踪了。cookie默认的max-age值为-1。

如不美观max-age属性为正数,则暗示该cookie会在max-age秒之后自动失踪效。浏览器会将max-age为正数的cookie持久化,即写到对应的cookie文件中。无论客户封锁了浏览器仍是电脑,只要还在max-age秒之前,登录网站时该cookie仍然有用。

如不美观不设置expires或者max-age这个cookie默认是Session的,也就是封锁浏览器该cookie就消逝踪了。

domain属性

因为cookie的名/值中的值不许可包含分号,逗号和空格符,为了最年夜化用户代办代庖和处事器的兼容性,任何被存储为 cookie 值的数据都应该被编码,例如用我们前端熟知的js全局函数encodeURIComponent编码和decodeURIComponent解码。

path属性
  它是一个布尔值,指定在收集上若何传输cookie,默认是不平安的,经由过程一个通俗的http毗连传输;

‍如不美观max-age为0,则暗示删除该cookie。cookie机制没有供给删除cookie的体例,是以经由过程设置该cookie即时失踪效实现删除cookie的效不美观。失踪效的Cookie会被浏览器年夜cookie文件或者内存中删除。

HttpOnly属性

这里要声名一下:Session的cookie在ie6下,如不美观用户其实网页上跳转打开页面或新开窗口(搜罗target="_blank",鼠标右键新开窗口),都是在统一个Session内。如不美观用户新开浏览器轨范或者说是历程再打开当前的页面就不是统一个Session。其他浏览器只要你Session存在,仍是统一个Session,cookie还能共享。在前段时刻的项目中ie6下吃了很年夜一个亏。


  指定了cookie的保留期,默认情形下cookie是且则存在的,他们存储的值只在浏览器会话时代放在,当用户退出浏览器后这些值也会丢失踪,如不美观想让cookie存在一段时刻,就要为expires属性设置为未来的一个用毫秒数暗示的过时日期或时刻点,expires默认为设置的expires的当前时刻。此刻已经被max-age属性所庖代,max-age用秒来设置cookie的保留期。


  domain属性可以使多个web处事器共享cookie。domain属性的默认值是建树cookie的网页地址处事器的主机名。不能将一个cookie的域设置成处事器地址的域之外的域。
  HttpOnly 属性限制了 cookie 对 HTTP 请求的浸染规模。出格的,该属性指示用户代办代庖忽略那些经由过程"非 HTTP" 体例对 cookie 的访谒(好比浏览器吐露给js的接口)。注重 HttpOnly 属性和 Secure 属性彼此自力:一个 cookie 既可所以 HttpOnly 的也可以有 Secure 属性。
  在前段时刻的项目中我就用js去篡夺一个cookie,结不美观怎么都取不到这个值,最后查证这个cookie是httpOnly的,花了近2个小时,悲剧了。

cookie操作在前端开发过程中经常碰着,当然如不美观只是用来存储一些简的暌姑户数据,仍是斗劲简单的,我们要做的可能只是设置cookie名,值,过时时刻等,篡夺也只要按照cookie的名篡夺响应的cookie值就可以了。在复杂的应用中,光这些必定就不够了。

cookie的传输

浏览器将cookie信息以name-value对的形式存储于当地,每当请求新文灯瘫,浏览器将发送Cookie,目的是让Server可以经由过程HTTP请求追踪客户。所以年夜WEB机能的角度来说我们要尽量的减小cookie,以达到传输机能的最年夜化。


  它指定与cookie联系关鲜ё仝一路的网页。在默认的情形下cookie会与建树它的网页,该网页处于统一目录下的网页以及与这个网页地址目录下的子目录下的网页联系关系

cookie的编码息争码

secure属性

cookie作为客户端存储

前面说了每当请求新文灯瘫,浏览器将发送Cookie各处事器,导致WEB机能下降。所以不建议将cookie作为客户端存储一种实现方案,替代方案参见:JavaScript当地存储实践(html5的localStorage和ie的userData)等。

同名的 cookie

同名的 cookie,分歧的 domain 或分歧的 path,属分歧的 cookie;同名的 cookie,不异的 domain 且不异的 path,分歧的 expires,属统一个 cookie。