博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

js cookie操作

Posted on 2012-04-10 08:52  bw_0927  阅读(525)  评论(0)    收藏  举报

http://www.niumowang.org/javascript/javascript-cookie/

cookie这个词想必很多做前段的朋友都接触过,但是没有详细的了解以及操作过。如何的确如此,那么就停下来了解一下如何通过JS来操作cookie值吧!

通过本文你将粗略的明白cookie是什么,如何通过js创建/存储以及获取cookie,如何让cookie过期来删除cookie...

什么是cookie?

cookie 是存储于访问者的计算机中的变量。每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie。你可以使用 JavaScript 来创建和取回 cookie 的值。

来自w3school的解释

某些 Web 站点在您的硬盘上用很小的文本文件存储了一些信息,这些文件就称为 Cookie。

MSIE的帮助信息

不同的浏览器针对cookie操作的方式不一样(比如ie是生成一个文本)。通俗一点的说,cookie就是比html高级一点的程序创建的,保存在客户端(就是你的电脑)来记录用户的一些信息的东西。

Cookie的结构:

每个cookie的结构都是这样的 cookie的名字=cookie的值 cookie的名字与值的命名方面同js的命名规则差不多,只不过多了“只能用可以用在url编码中的字符”,即如果保存汉字的话,需要用 escape()编码,然后读取的时候用unescape()解码;

每个cookie都有过期时间,当电脑的时间过了给定的过期时间,这个cookie就会失效。js无法直接删除cookie值,但是可以通过设置失效日期来让此cookie无法工作。

如何创建/保存cookie:

创建cookie的方法,用到的是documents.cookie属性;给cookie赋值的方法如下:

documents.cookie = 'cookieName=' + escape('cookieValue')+ ';expires=' + expirationDateObj.toGMTString();

看到这些是否有些麻木呢?其实说明一下很简单,cookieName是你的cookie的名字,比如 “niumowang_cookie”;cookieValue是你的cookie的值,比如“牛魔王的世界观”;expirationDateObj 是保存过期时间的对象名,toGMTString()是将时间设置成GMT(格林尼治时间),cookie只支持此时间格式。如果这里不设置时间的话,默 认是浏览器关闭窗口cookie过期。

OK,我们来看一个保存用户名字的cookie示例,我们设置一个 “name”=“pizi”的cookie,并在2个月过期

function setCookie(){
var expires = new Date();
expires.setTime(expires.getTime() + 2 * 30 * 24 * 60 * 60 * 1000);
/* 2个月 x  30 天 x  24 小时 x  60 分 x 60 秒 x  1000 毫秒 */
documents.cookie = 'name=pizi;expires=' + expires.toGMTString();
}

上面的pizi没有用escape编码是因为,escape编码后的结果就是escape

js 如何读取cookie:

function getCookie(c_name)
{
if (document.cookie.length>0)
  {
  c_start=document.cookie.indexOf(c_name + "=")
  if (c_start!=-1)
    {
    c_start=c_start + c_name.length+1
    c_end=document.cookie.indexOf(";",c_start)
    if (c_end==-1) c_end=document.cookie.length
    return unescape(document.cookie.substring(c_start,c_end))
    }
  }
return ""
}
上面的函数首先会检查 document.cookie 对象中是否存有 cookie。假如 document.cookie 对象存有某些 cookie,那么会继续检查我们指定的 cookie 是否已储存。如果找到了我们要的 cookie,就返回值,否则返回空字符串。

js如何删除cookie:

function delCookie (NameOfCookie)
{
// 检查cookie是否设置,如果设置了则将过期时间调到过去的时间;
//Thu, 01-Jan-70 00:00:01 GMT,该时间为1970年1月1号
if (getCookie(NameOfCookie)) {
document.cookie = NameOfCookie + "=" +
"; expires=Thu, 01-Jan-70 00:00:01 GMT";
}

上面函数检测是否设置了名字为 NameOfCookie的cookie,如果设置的话将该cookie的失效日期调到1970年1月1号,这样该cookie就会失效,剩下的就是浏览器处理过期cookie的机制了。关于该时间,可以参考:关于1970-1-1 00:00:0000的知识

js操作cookie教程与实例:

w3school有一些关于js操作cookie的教程,并附带一个欢迎cookie的示例,有兴趣的朋友去看下,地址:http://www.w3school.com.cn/js/js_cookies.asp

下面是js操作cookie的示例演示:运行代码会提示输入用户名,然后关闭打开的窗口再运行一次代码会看到效果。或者另存为html文件查看演示

<html>
<head>
<script type="text/javascript">
function getCookie(c_name)
{
if (document.cookie.length>0)
  {
  c_start=document.cookie.indexOf(c_name + "=")
  if (c_start!=-1)
    {
    c_start=c_start + c_name.length+1
    c_end=document.cookie.indexOf(";",c_start)
    if (c_end==-1) c_end=document.cookie.length
    return unescape(document.cookie.substring(c_start,c_end))
    }
  }
return ""
}

function setCookie(c_name,value,expiredays)
{
var exdate=new Date()
exdate.setDate(exdate.getDate()+expiredays)
document.cookie=c_name+ "=" +escape(value)+
((expiredays==null) ? "" : ";expires="+exdate.toGMTString())
}

function checkCookie()
{
username=getCookie('username')
if (username!=null && username!="")
  {alert('Welcome again '+username+'!')}
else
  {
  username=prompt('Please enter your name:',"")
  if (username!=null && username!="")
    {
    setCookie('username',username,365)
    }
  }
}
</script>
</head>

<body onLoad="checkCookie()">
</body>
</html>

运行代码复制代码另存代码(提示:可以编辑后运行)

 

下面分享一个js操作cookie的函数(比较有用,欢迎收藏):

///设置cookie
function setCookie(NameOfCookie, value, expiredays) {
	var ExpireDate = new Date();
	ExpireDate.setTime(ExpireDate.getTime() + (expiredays * 24 * 3600 * 1000));
	document.cookie = NameOfCookie + "=" + escape(value) + ((expiredays == null) ? "": "; expires=" + ExpireDate.toGMTString());
}
///获取cookie值
function getCookie(NameOfCookie) {
	if (document.cookie.length > 0) {
		begin = document.cookie.indexOf(NameOfCookie + "=");
		if (begin != -1) {
			begin += NameOfCookie.length + 1;
			end = document.cookie.indexOf(";", begin);
			if (end == -1) end = document.cookie.length;
			return unescape(document.cookie.substring(begin, end));
		}
	}
	return null;
}
///删除cookie
function delCookie(NameOfCookie) {
	if (getCookie(NameOfCookie)) {
		document.cookie = NameOfCookie + "=" + "; expires=Thu, 01-Jan-70 00:00:01 GMT";
	}
}

复制代码