/**
* 设置cookie
* @param {type} 名字,值,时间,路径,有效域名
* @returns {Boolean}
*/
function setCookie(name, value, expires, path, domain) {
var str = name + "=" + escape(value);
if (expires || expires === 0) {
var date = new Date();
date.setTime(date.getTime() + expires * 1000);//expires单位为秒
str += ";expires=" + date.toUTCString();
}
if (path || path === 0) {
str += ";path=" + path;//指定可访问cookie的目录
}
if (domain || domain === 0) {
str += ";domain=" + domain;//指定可访问cookie的域
}
document.cookie = str;
}
/**
* 取得cookie
* @param {type} name
* @returns {Boolean}
*/
function getCookie(name) {
var str = document.cookie.split("; ");//这里必须是“分号空格”
for (var i = 0; i < str.length; i++) {
var str2 = str[i].split('=');
if (str2[0] == name) {
if (str2[1] || str2[1] === 0) {
return unescape(str2[1]);
} else {
break;
}
}
}
return false;
}
/**
* 为了删除指定名称的cookie,可以将其过期时间设定为一个过去的时间
* @param {type} name cookie名
* @param {type} path cookie路径(默认为当前路径)
* @returns {undefined}
*/
function delCookie(name, path) {
var date = new Date();
date.setTime(date.getTime() - 10000);
var str
if (path || path === 0) {
str = ";path=" + path;//指定可访问cookie的目录
}
document.cookie = name + '=' + str + ';expire=' + date.toUTCString();
}
[下面讲的经个人觉得比较好哦!]
我们当然还得介绍cookie的四个属性。这些属性用下面的格式加到字符串值后面: name=<value>[; expires=<date>][; domain=<domain>][; path=<path>][; secure] 名称=<值> [; expires=<日期>][; domain=<域>] [; path=<路径>][; 安全] <value>, <date>, <domain> 和 <path> 应当用对应的值替换。 <date> 应当使用GMT格式,可以使用Javascript脚本语言的日期类Date的.toGMTString()
方法得到这一GMT格式的日期值。方括号代表这项是可选的。比如在 [; secure]两边的方括号代表要想把cookie设置成安全的,就需要把"; secure" 加到cookie字符串值的后面。如果"; secure" 没有加到cookie字符串后面,那么这个cookie就是不安全的。不要把尖括号<> 和方括号[] 加到cookie里(除非它们是某些值的内容)。设置属性时,不限属性,可以用任何顺序设置。 下面是一个例子,在这个例子里,cookie "username" 被设置成在15分钟之后过期,可以被服务器上的所有目录访问,可以被"mydomain.com"域里的所有服务器访问,安全状态为安全。
// Date() 的构造器设置以毫秒为单位
// .getTime() 方法返回时间,单位为毫秒
// 所以要设置15分钟到期,要用60000毫秒乘15分钟
var expiration = new Date((new Date()).getTime() + 15 * 60000);
document.cookie = "username=" + escape(form.username.value)+ "; expires ="+ expiration.toGMTString() + "; path=" + "/" + "; _domain=" + "mydomain.com" + "; secure";
// 我们定义一个函数,用来读取特定的cookie值。[得到指定名字的cookie对象哦!]
function getCookie(cookie_name){
var allcookies = document.cookie;
var cookie_pos = allcookies.indexOf(cookie_name);
// 如果找到了索引,就代表cookie存在,
// 反之,就说明不存在。
if (cookie_pos != -1){
// 把cookie_pos放在值的开始,只要给值加1即可。
cookie_pos += cookie_name.length + 1;
var cookie_end = allcookies.indexOf(";", cookie_pos);
if (cookie_end == -1){
cookie_end = allcookies.length;
}
var value = unescape(allcookies.substring(cookie_pos, cookie_end));
}
return value;
}
var cookie_val = getCookie("username");// 调用函数
3.为什么我设置了cookie的过期时间如果为关闭的时候就自动清空的话怎么没用呢?
Cookie概念:
Cookie的格式实际上是一段纯文本信息, 由服务器随着网页一起发送到客户端, 并保存在客户端硬盘中指定的目录的. 大家都传说Cookie会造成严重的安全威胁什么的, 其实不是这么回事情. 服务器读取Cookie的时候, 只能够读取到这个服务器相关的信息. 而且, 浏览器一般只允许存放300个Cookie, 每个站点最多存放20个, 而且, 每个Cookie的大小现在在4K, 根本不会占用多少空间. 并且, Cookie是有时效性质的. 例如, 设置了Cookie的存活时间为1分钟, 则一分钟后这个Cookie就会被浏览器删除
Cookie版本:
目前有两个版本:
版本0 : 由Netscape公司制定的,也被几乎所有的浏览器支持. Java中为了保持兼容性, 目前只支持到版本0, Cookie的内容中不能空格,方括号,圆括号,等于号(=),逗号,双引号,斜杠,问号,@符号,冒号,分号。
版本1 : 根据RFC 2109文档制定的. 放宽了很多限制. 上面所限制的字符都可以使用. 但为了保持兼容性, 应该尽量避免使用这些特殊字符.