使用cookie检查回访用户



我有一个博客,需要用户通过电子邮件注册才能查看完整的帖子。如果用户已经注册,我想跳过这个要求。

这是它的工作原理。

  1. 用户访问页面,如果cookie存在,则显示内容
  2. 如果cookie不存在,用户必须注册
  3. 用户注册,cookie创建。

我的代码的问题是,它是post特定的。比方说我们有邮政A & &;帖子B:如果用户选择了帖子A,他们将需要再次选择帖子B,这是不好的。

如果他们选择加入帖子A,我也想在帖子B上识别cookie。

我如何调整我的代码?

     if (document.cookie.indexOf("entered_email")>=0) {
          jQuery('.hidden-blog').slideDown();   
    }

$('.snp-subscribeform').on('submit', function() {   
      $('.hidden-blog').slideDown();
      document.cookie="entered_email=true;expire=06/12/2018";
    });

您需要将cookie上的路径设置为"/",然后允许该站点上的任何页面看到cookie。当您不为cookie值设置路径时,它默认为当前页面的路径,这限制了该cookie仅在该路径下可见。

这里有一些用于处理cookie的实用函数,它们允许您设置路径或将默认路径设置为"/"

使用这些,你的代码看起来像这样:
if (readCookie("entered_email") === "1") {
    jQuery('.hidden-blog').slideDown();   
}
$('.snp-subscribeform').on('submit', function() {   
    $('.hidden-blog').slideDown();
    // cookie path in this function defaults to "/" so all pages on the
    // site can access the cookie
    createCookie("entered_email", "1", 365 * 3);
});

下面是cookie管理函数:

// createCookie()
// name and value are strings
// days is the number of days until cookie expiration
// path is optional and should start with a leading "/" 
//   and can limit which pages on your site can 
//   read the cookie.
//   By default, all pages on the site can read
//   the cookie if path is not specified
function createCookie(name, value, days, path) {
    var date, expires = "";
    path = path || "/";
    if (days) {
        date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        expires = "; expires=" + date.toGMTString();
    }
    document.cookie = name + "=" + value + expires + "; path=" + path;
}
function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for (var i = 0; i < ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}
function eraseCookie(name) {
    createCookie(name, "", -1);
}

最新更新