-
创建 cookie
Web 服务器通过发送一个称为 Set-Cookie
的 HTTP 消息头来创建一个 cookie,Set-Cookie
消息头是一个字符串,其格 式如下(中括号中的部分是可选的):
1 | Set-Cookie: value[; expires=date][; domain=domain][; path=path][; secure] |
-
secure 选项
最后一个选项是 secure
。不像其它选项,该选项只是一个标记而没有值。只有当一个请求通过 SSL 或 HTTPS 创建时,包含 secure
选项的 cookie 才能被发送至服务器。这种 cookie 的内容具有很高的价值,如果以纯文本形式传递很有可能被篡改,例如:
1 | Set-Cookie: name=Nicholas; secure |
-
HTTP-Only cookies
微软的 IE6 SP1 在 cookie 中引入了一个新的选项:HTTP-only
,HTTP-Only
背后的意思是告之浏览器该 cookie 绝不能通过 JavaScript 的 document.cookie
属性访问。设计该特征意在提供一个安全措施来帮助阻止通过 JavaScript 发起的跨站脚本攻击 (XSS) 窃取 cookie 的行为(我会在另一篇博客中讨论安全问题,本篇如此已足够)。今天 Firefox2.0.0.5+、Opera9.5+、Chrome 都支持 HTTP-Only cookie。3.2 版本的 Safari 仍不支持。
要创建一个 HTTP-Only cookie,只要向你的 cookie 中添加一个 HTTP-Only
标记即可:
1 | Set-Cookie: name=Nicholas; HttpOnly |
-
cookie 自动删除
cookie 会被浏览器自动删除,通常存在以下几种原因:
- 会话 cooke (Session cookie) 在会话结束时(浏览器关闭)会被删除
- 持久化 cookie(Persistent cookie)在到达失效日期时会被删除
- 如果浏览器中的 cookie 数量达到限制,那么 cookie 会被删除以为新建的 cookie 创建空间。详见我的另外一篇关于 cookies restrictions 的博客
对于自动删除来说,Cookie 管理显得十分重要,因为这些删除都是无意识的。