cookie知识点 | 描述 |
cookie的内容 | 名字,值,过期时间,路径和域。路径与域一起构成cookie的作用范围 注:可以保存中文和二进制 |
过期时间 | 1) 若不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。这种生命期为浏览器会话期的cookie被称为会话cookie。会话cookie一般不存储在硬盘上而是保存在内存里 2) 若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。(存储在硬盘上的cookie可以在不同的浏 览器进程间共享,比如两个IE窗口。而对于保存在内存里的cookie,不同的浏览器有不同的处理方式) |
多个浏览器共享 | 存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。 而对于保存在内存里的cookie,不同的浏览器有不同的处理方式 |
安全性 | 存储在内存中的cookie比存储在硬盘上的cookie安全 |
分类 | 内存中的cookie(该Cookie仅在本浏览器窗口以及本窗口打开的子窗口内有效,关闭窗口后该Cookie即失效) 硬盘上的cookie |
保存方式 | Cookie实际上是一小段的文本信息 不同的浏览器有不同的方式 |
Cookie的不可跨域名性 | 1) Cookie在客户端是由浏览器来管理的。浏览器能够保证Google只会操作Google的Cookie而不会操作Baidu的Cookie,从而保证用户的隐私安全。浏览器判断一个网站是否能操作另一个网站Cookie的依据是域名。 2) 不同域名不可访问,修改其他域名的cookie 注意:用户登录网站www.google.com之后会发现访问images.google.com时登录信息仍然有效,而普通的Cookie是做不到的。这是因为Google做了特殊处理。 |
cookie命令 | 例子 |
document.cookie | 所有cookie |
document.cookie="userId=828"; document.cookie="userId=828; userName=hul; |
设置 |
document.cookie="str="+escape("I love ajax"); 相当于 document.cookie="str=I%20love%20ajax"; 取出值以后需要使用unescape()进行解码 |
在cookie 的名或值中不能使用分号(;)、逗号(,)、 等号(=)以及空格。 在cookie的名中做到这点很容易,但要保存的值是不确定的。 如何来存储这些值呢? 方 法是用escape()函数进行编码, 它能将一些特殊符号使用十六进制表示, 例如空格将会编码为“20%”,从而可以存储于cookie值中, 而且使用此 种方案还可以避免中文乱码的出现。 |
//获取当前时间 var date=new Date(); var expiresDays=10; //将date设置为10天以后的时间 date.setTime(date.getTime()+expiresDays*24*3600*1000); //将userId和userName两个cookie设置为10天后过期 document.cookie="userId=828; userName=hulk; expires="+date.toGMTString(); |
要将cookie设置为10天后过期 |
//获取当前时间
var date=new Date(); //将date设置为过去的时间 date.setTime(date.getTime()-10000); //将userId这个cookie删除 document.cookie="userId=828; expires="+date.toGMTString();
效果:
document.cookie已经查不到了
|
删除一个cookie,可以将其过期时间设定为一个过去的时间 |
document.cookie="userId=320; path=/"; 根目录 |
指定可访问cookie的路径 默认:默 认情况下,如果在某个页面创建了一个cookie,那么该页面所在目录中的其他页面也可以访问该cookie。如果这个目录下还有子目录,则在子目录中也 可以访问。 |
以google为例,要实现跨主机访问,可以写为:所有google.com下的主机都可以访问该cookie document.cookie="name=value;domain=.google.com"; |
指定可访问cookie的主机名 主机名是指同一个域下的不同主机,例如:www.google.com和gmail.google.com就是两个不同的主机名。默认情况下, 一个主机中创建的cookie在另一个主机下是不能被访问的,但可以通过domain参数来实现对其的控制 |
注: 增加 function addCookie(name,value,expiresHours){ var cookieString=name+"="+escape(value); //判断是否设置过期时间 if(expiresHours>0){ var date=new Date(); date.setTime(date.getTime+expiresHours*3600*1000); cookieString=cookieString+"; expires="+date.toGMTString(); } document.cookie=cookieString; } 获取 function getCookie(name){ var strCookie=document.cookie; var arrCookie=strCookie.split("; "); for(var i=0;i<arrCookie.length;i++){ var arr=arrCookie[i].split("="); if(arr[0]==name)return arr[1]; } return ""; } 删除 function deleteCookie(name){ var date=new Date(); date.setTime(date.getTime()-10000); document.cookie=name+"=v; expires="+date.toGMTString(); } |
增删改查 参考: http://www.w3school.com.cn/js/js_cookies.asp |
方法一: function clearme(){ var cookies = document.cookie.split(";"); for (var i = 0; i < cookies.length; i++) { var cookie = cookies[i]; var eqPos = cookie.indexOf("="); var name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie; document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/"; } if(cookies.length > 0) { for (var i = 0; i < cookies.length; i++) { var cookie = cookies[i]; var eqPos = cookie.indexOf("="); var name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie; var domain = location.host.substr(location.host.indexOf('.')); //www.baidu.com---> baidu.com document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/; domain=" + domain; } } } 方法二 http://www.jb51.net/article/25405.htm 方法不行 function clearCookie(){ var keys=document.cookie.match(/[^ =;]+(?=\=)/g); if (keys) { for (var i = keys.length; i--;) document.cookie=keys[i]+"=;expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/"; //也可加上 domain |
清除所有cookie |
session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。
当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识
(称为session id),如果已包含则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来
使用(检索不到,会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相
关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应
中返回给客户端保存。
注意点:1) 保存session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器。
一般这个cookie的名字都是类似于SEEESIONID。
2) 如果cookie被禁止,为保证 能够把session id传递回服务器,有如下方法: 会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。比如:
<form name="testform" action="/xxx">
<input type="hidden" name="jsessionid" value="ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764">
<input type="text">
</form>
区别 | session | cookie |
端/目的 | 而session机制采用的是一种在客户端与服务器之间保持状态的解决方案。 注: 由于采用服务器端保持状态的方案在客户端也需要保存一个标识, 所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上它还有其他选择。 |
cookie机制采用的是在客户端保持状态的方案 cookie的作用就是为了解决HTTP协议无状态的缺陷所作的努力 |
存放 | 放在服务器 | 存放在客户的浏览器 |
安全性 | 考虑到安全应当使用session | cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗 |
性能 | session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能 | 不影响服务器性能 由于浏览器每次请求服务器都会携带Cookie,因此Cookie内容不宜过多,否则影响速度。Cookie的内容应该少而精 |
大小 | 无 | 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie |
使用建议 | 将登陆信息等重要信息存放为SESSION | 其他信息如果需要保留,可以放在COOKIE中 |