在Windows系统中,cookie通常是被储存在C:\Documents and settings\用户名\cookie目录下(如果系统在C盘)。其实每个cookie实际上就是一个文本文件,里面是用来保存一些字符数据,这些数据是有代码进行写入不仅是JavaScript和任何服务端语言;还并能在先前写入过的信息以及网页进行读取,也就是说当我们在浏览网页时,页面中的JavaScript代码已经把这些数据写入我们的电脑。当然这些信息并不一定永远存在浏览者的电脑中,每个Cookie都有自己的存在时间,这就是由代码进行控制的。
在JavaScript中操作Cookie,只需新增一个Cookie对文档对象的Cookie属性进赋值即可, 如:<script> document.cookie = “msg”; </script>
这是很简单的文档对象,但你在文件夹中是无法看见到这个Cookie文件的,因为他的生命周期是在关闭浏览器后就会结束 ,所以系统没有写入本地硬盘中。这些都是由于Cookie的属性所决定的。
设置Cookie属性并不是我们通过“.”来访问的。是经过Cookie的本身有一堆属性所组成的,这就是他们应用的字符串(数字和应用的代码)。
以下是常用的一些代码: <script> //过期时间一分钟 var expiration = new Date (new Date(),getTime() +1*60000); (这是以代码的属性时间来变量赋值) document.cookie = "yyy;path=/;expires=" + expiration.toGMTString() </script>
在代码中含有3个属性,包括正文、读取路径以及过期时件。它们以分号间隔并使用特定的“属性=值”的格式来表示,出正文部分之外。除了path和expires外,Cookie还有其他一些属性,JavaScript中的Cookie如图表:
1.expires 的过期时间用来控制一个Cookie的生命期,也就是它硬盘里存在的时间。无论是写入的时间还是指定的过期时间,它们都是来自于客户机而不是服务器,因为Cookie是存在于浏览者计算机上的。所以时间格式必须是标准的GMT格式,如上图所示;现在以这种在当前时间的基础上增加指定时间的方式来表达:
//过期时间。D阿特()构造函数接收毫秒单位的参数 var expiration = new date(new Date().gettime() + 1 * 60000);
如果不设置或者设置为早于当前的时间,那么Cookie将不被写入硬盘,因为他没有被保存 ,这宗特性可以用来删除Cookie文件.
2.path 的路径用来指定页面所能访问Cookie最顶层的目录,
E:/a.html
E:/sec/b.html
E:/sec/thr/c.html
换了在a.html中设置了path=/,那我们根据根的目录所得a.html、b.html和c.html都可以通过document.cookie来读取里面的信息,如果没设置path=/E:/sec,那么只有b.html和c.html能够读取到Cookie。(注意:上面的代码在IE中无法运行,只能通过file:///协议在FF或在Opera等浏览器中运行,主要是由于对Cookie本地路径的问题。如果是使用IE进行不同的路径的测试,则必须在服务器端建立服务和访问。
注意path中的大小写,如果写成这样path=/e:/sec,那么它就会变成另一个新的Cookie。
比如我们要写如信息,姓名、性别、年龄等?不会生成多个Cookie文件,只会产生覆盖原来的值。在同一页面中设置两次Cookie:
document.cookie ="xxx";
document.cookie ="yyy";
存取多个不同类型值在Cookie中的代码如:
<script>
//我的姓名、性别、出生年龄 “ 方式一”
document.cookie = "yyy;xxx;zzz;";
//我的工作、出差时间、休息时间 “方式二”
document.cookie = "yyy,xxx,zzz,";
</script>
使用设置“方式一”,系统通过分号来进行属性的分割。对征文属性来说,它只是认第一个值,在代码中就是yyy,而xxx和zzz则被认为是非法属性而忽略掉。
使用“方式二”没有用分号来分割三个值,而是用逗号。系统会认为“yyy,xxx,zzz”是一个整体,都属于正文属性。都能被读取到。
3.domain域名用来限定可以访问Cookie的地域名地址。很多网站除了主域名外还会有很多二级域名,例如百度有www.baidu.com、hi.baidu.com、mp3.baidu.com、map.baidu.com 等,通过系统为了安全考虑,只允许每个域访问自己创建的Cookie,如果是多个的域共享Cookie信息,就必须更改Cookie的domain属性了。如代码:
document.cookies = "yyy,xxx,zzz;domain=baidu.com";
现在这个Cookie就可以被百度的所有二级域中的页面所共享,domain可以和path属性一起限制Cookie的访问。
4.secure 安全性可以帮助Cookie在传递的过程中进行加密。也就是说在本地硬盘中的Cookie是可以被打开看到,代码如:document.cookie = "yyy,xxx,zzz;secure";
设置安全属性很简单,只需要用分号隔开secure属性就可以了,但是增加了secure属性后的Cookie在普通的HTTP协议下再也无法读取到了,因为它只是本文转自huangyouliang10 51CTO博客,原文链接:http://blog.51cto.com/1572091hyl10/401128