曲奇(小甜点),来源于英语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>