在公司作为一名产品人员,为了方便同事查看产品原型于是自己编码构建一个简单的原型导航页,却发现大多人不知如何使用,于是便产生了增加一个仅在浏览者第一次进入网站时显示操作指引的功能。
最终效果
查阅了资料之后发现 w3school 关于 cookie 的使用教程 比较容易让人理解,但对于我一个新手来说还是有许多不懂的地方,于是再次查阅资料结合自己的理解对代码进行逐行的注释。如有错误,希望指出。
主要分为 3 个部分
- 创建和存储 cookie
- 获取 cookie
- 检查 cookie
1. 创建和存储 cookie
代码:
//setCookie 方法需要传入 3 个参数 :
//c_name (cookie 的名称)、value (cookie 的值)、expiredays(cookie 有效时间)
function setCookie(c_name,value,expiredays)
{
//创建一个 Date 对象
var exdate=new Date()
//使用 getDate() 方法获取当前日期 例如:24
//使用 setDate 方法设置 exdate 的时间为:当前日期 + expiredays(cookie 有效时间)
exdate.setDate(exdate.getDate()+expiredays)
//设置 cookie 并赋值给 documet.cookie
//判断 expiredays (cookie 有效时间)是否为 null,如果是则值为空,否则同样赋值给 document.cookie
document.cookie=c_name+ "=" +escape(value)+
((expiredays==null) ? "" : ";expires="+exdate.toGMTString())
}
特别举例解释一下:
exdate.setDate(exdate.getDate()+expiredays)
例如:现在时间是 2017 - 09 - 24
exdate.getDate() 的值就是 24,
如果 expiredays 传入的值为 10,exdate.getDate()+expiredays = 24+10 = 4 (因为 9 月 24 日往后数 10 天就是 10 月 4 日)
最后
exdate = 10 月 4 日 (cookie 在此时过期)
关于 escape 应用 w3school 的解释
escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串。
关于 toGMTString() w3school 的解释
toGMTString() 方法可根据格林威治时间 (GMT) 把 Date 对象转换为字符串,并返回结果。
不赞成使用此方法。请使用 toUTCString() 取而代之!!
2. 获取 cookie
第 1 步中完成了通过给 cookie 设置键与值以及有效时间的方式创建和存储 cookie 的工作,接下来需要获取 cookie
代码
//getCookie 方法传入在设置 cookie 时设置的键作为参数,返回 cookie 的值
function getCookie(c_name)
{
if (document.cookie.length>0)
{
//如果 document.cookie.length > 0 说明存在 cookie
//使用 indexOf() 方法获取 document.cookie 中是否存在字符串 = c_name + "=" ,
//如果有则返回索引,否则返回 -1 ,最后将返回值赋值给 c_start
c_start=document.cookie.indexOf(c_name + "=")
if (c_start!=-1)
{
// c_start != -1 说明指定的 cookie( c_name) 有值
//使用 substring() 方法截取 cookie 的值 ,在这之前,先获取截取的起点与终点
c_start=c_start + c_name.length+1
c_end=document.cookie.indexOf(";",c_start)
//如果 c_end == -1 ,说明 document.cookie 中从 c_start 开始没有查找到";"
//说明 document.cookie 中仅有 1 个键值对(只有 1 个 cookie)
if (c_end==-1)
{
//如果 document.cookie 中仅有 1 个键值对,那 substring() 截取的终点就是 document.cookie 的长度值
c_end=document.cookie.length
}
//由于前面使用了 escape() 进行编码,这里需要使用 unescapge 进行解码并返回值
//w3school 注释:ECMAScript v3 已从标准中删除了 unescape() 函数,并反对使用它,
//因此应该用 decodeURI() 和 decodeURIComponent() 取而代之。
return unescape(document.cookie.substring(c_start,c_end))
}
}
return ""
}
3. 检查 cookie
最后,在用户访问网页时使用 checkCookie 方法
function checkCookie()
{
// 使用 getCookie 方法获取指定 cookie
first=getCookie('first')
//判断指定 cookie 值是否存在
if (first!=null && first!="")
{
//如果存在指定的 cookie 值 说明用户不是第一次进入网页不提示用户
}
else
{
//用户是第一次打开网页,显示操作提示
layer.tips('点击查看对应版本') // layer 的用法可查看文末参考资料
//设置 cookie ,记录当前用户已访问过一次网页,待下一次用户打开网页时使用
setCookie('first','1',365)
}//else END
}
完成
参考资料:
1. w3school JavaScript Cookies
2. 脚本之家
3. layer