检查Cookie是否存在,否则将Cookie设置为在10天后过期。

22

我想要做的事情如下(伪代码):

假设示例中的cookie名称为“visited”,且其不包含任何内容。

if visited exists
then alert("hello again");
else
create visited - should expire in 10 days;
alert("This is your first time!")

我怎样才能在JavaScript中实现这个?

2个回答

69
你需要读取和写入 document.cookie
if (document.cookie.indexOf("visited=") >= 0) {
  // They've been here before.
  alert("hello again");
}
else {
  // set a new cookie
  expiry = new Date();
  expiry.setTime(expiry.getTime()+(10*60*1000)); // Ten minutes

  // Date()'s toGMTSting() method will format the date correctly for a cookie
  document.cookie = "visited=yes; expires=" + expiry.toGMTString();
  alert("this is your first time");
}

2
如果“expires”已经过时,您如何使cookie过期? - aamiri
7
更新的替代方案是使用 max-age=numseconds 来设置 cookie 在被创建后 numseconds 秒后过期。请参考这里的其他答案以了解用法。 - Michael Berkowski
1
其实并不重要,但为了清晰起见,我会使用 > -1 而不是 >= 0 - Silver Ringvee
1
这种方法的唯一失败情况是如果存在同名的cookie:blabla_visited - T.Todua
1
感谢@MichaelBerkowski - 坚持不懈(我有点像斗牛犬编码 笑!)和调试终于得到了回报。查看HTML源代码(也是),许多人认为它不是调试“工具”,帮助我看到从包含的PHP文件中拉入JS时我的JS失败的位置,并且使用了cookies,还需要检查文件是否为空,这是他们想让我做的一个真正的艰巨项目。现在我可以继续我的其余工作了; 终于结束了(没有打算在这里发布评论)。 - Funk Forty Niner
显示剩余10条评论

21
if (/(^|;)\s*visited=/.test(document.cookie)) {
    alert("Hello again!");
} else {
    document.cookie = "visited=true; max-age=" + 60 * 60 * 24 * 10; // 60 seconds to a minute, 60 minutes to an hour, 24 hours to a day, and 10 days.
    alert("This is your first time!");
}

这是其中一种实现方式。请注意,document.cookie 是一个特殊的属性,所以您不必担心覆盖任何内容。

还有一些更方便的库来处理 cookies,如果您不需要在每个请求中将存储的信息发送到服务器,则HTML5 的 localStorage 和相关技术也非常方便和有用。


3
Chrome修复:/(^|;\s?)visited=/ - Mike Causer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接