如何创建一个可以存储列表/数组的Cookie
问题描述:
在我当前的项目中,每次他/她登录到站点时都必须显示一个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值,我觉得有可能是一个更好的方式来实现这一目标。建议请.. !!
答
您正在保存以UniqueID作为名称的Cookie。只是检查,如果该Cookie已经存在直接:
if (! $.cookie(UniqueId)) {
//show popup
} else {
// hide popup
}
答
这听起来非常很像一个非常糟糕的设计选择,但要回答这个问题的提出,只是连载数组和字符串转换为Base64。然后你可以在之后再解析它。
正如在OP的评论中所提到的那样,在你提到的场景中这是必要的边缘情况很少。另外,不要在jQuery中设置或获取cookie。尽可能使用您的服务器端语言来收集和设置Cookie信息,并将其发送到需要的页面。不要在使用数据存储更好的地方使用cookie。一旦设置了cookie信息,您就无法控制cookie信息,因此它们可以成为应用程序中的安全载体。
Cookie存储在每个配置文件,每个浏览器,每个用户,每台计算机上,因此并不总是存储此信息的最佳方式。相反,请考虑在用户个人资料表中添加两列,DisplayWelcomeMessage
作为布尔值,SuppressWelcomeMessageExpiry
作为日期时间。这样,信息就会按用户设置,而不是每个Cookie。它允许应用程序具有更高的可扩展性,因为它可以让用户在到期之前将其重新打开。
'$ .cookie(UniqueId)'? – Malk
除非两个用户在同一台浏览器上的同一台计算机上登录到该网站,否则Cookie中永远不会有多个用户。这是你需要处理的场景吗?其次,将用户标识保存在非加密的cookie中是一个非常糟糕的主意。 –
Cookie在本地存储在用户的计算机上。我不明白为什么你应该有多个uuid,而你只有一个用户。 –