2016-01-21 50 views
-2

在我当前的项目中,每次他/她登录到站点时都必须显示一个Popup(欢迎信息)。在弹出窗口用户有一个选项(Onclick CheckBox)来隐藏弹出窗口30天。如何创建一个可以存储列表/数组的Cookie

我通过保存一个UserUniqueId cookie(这应该是一个数组/列表),当他/她点击弹出框上的复选框来实现。如下

var UniqueId = "xxx"; 
    var uIDCookies = []; 

    // looping to get all the values that are stored in cookie 
    $.each($.cookie(), function(i, v) { 
     uIDCookies.push(i); 
    }); 

    // if current userUID not found in cookie then showing popup 
    if (($.inArray(UniqueId, uIDCookies)) === -1) { 
     //show popup 
    } else { 
     // hide popup 
    } 

    // create cookie and set expire time 
    $('.checkBox').on('click', function() { 
      var date = new Date(); 
      var minutes = 3; 
      date.setTime(date.getTime() + (minutes * 60 * 1000)); 
      $.cookie(UniqueId, { expires: date, path: '/' }); 
      //hide popup 
    }); 

不管是什么,我通过循环被存储在客户端浏览器,以便所有cookie值,我觉得有可能是一个更好的方式来实现这一目标。建议请.. !!

+0

'$ .cookie(UniqueId)'? – Malk

+3

除非两个用户在同一台​​浏览器上的同一台计算机上登录到该网站,否则Cookie中永远不会有多个用户。这是你需要处理的场景吗?其次,将用户标识保存在非加密的cookie中是一个非常糟糕的主意。 –

+0

Cookie在本地存储在用户的计算机上。我不明白为什么你应该有多个uuid,而你只有一个用户。 –

回答

0

您正在保存以UniqueID作为名称的Cookie。只是检查,如果该Cookie已经存在直接:

if (! $.cookie(UniqueId)) { 
     //show popup 
    } else { 
     // hide popup 
    } 
0

这听起来非常很像一个非常糟糕的设计选择,但要回答这个问题的提出,只是连载数组和字符串转换为Base64。然后你可以在之后再解析它。

正如在OP的评论中所提到的那样,在你提到的场景中这是必要的边缘情况很少。另外,不要在jQuery中设置或获取cookie。尽可能使用您的服务器端语言来收集和设置Cookie信息,并将其发送到需要的页面。不要在使用数据存储更好的地方使用cookie。一旦设置了cookie信息,您就无法控制cookie信息,因此它们可以成为应用程序中的安全载体。

Cookie存储在每个配置文件,每个浏览器,每个用户,每台计算机上,因此并不总是存储此信息的最佳方式。相反,请考虑在用户个人资料表中添加两列,DisplayWelcomeMessage作为布尔值,SuppressWelcomeMessageExpiry作为日期时间。这样,信息就会按用户设置,而不是每个Cookie。它允许应用程序具有更高的可扩展性,因为它可以让用户在到期之前将其重新打开。

相关问题