在我目前的项目中,每次他/她登录网站时我都必须显示一个Popup(欢迎信息)。在弹出窗口中,用户有一个选项(Onclick CheckBox)来隐藏弹出窗口30天。
我通过在弹出窗口中单击checkBox时将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 :(得分:0)
您正在使用UniqueID作为名称保存Cookie。只需检查该cookie是否已直接存在:
if (! $.cookie(UniqueId) ) {
//show popup
} else {
// hide popup
}
答案 1 :(得分:0)
这听起来非常可疑,就像一个非常糟糕的设计选择,但要回答问题,只需序列化数组并将字符串转换为Base64。然后你可以在之后再次解析它。
正如OP的评论中提到的那样,在您提到的场景中,这是必要的边缘情况。另外,不要在jQuery中设置或获取cookie。使用服务器端语言尽可能收集和设置cookie信息,并将其发送到需要的页面。不要在最好使用数据存储的地方使用cookie。一旦设置了cookie信息,您就无法控制它们,因此它们可以成为应用程序的安全媒介。
每个配置文件,每个浏览器,每个用户,每台计算机都存储Cookie,因此始终不是存储此信息的最佳方式。相反,请考虑在用户配置文件表中添加两列,DisplayWelcomeMessage
作为布尔值,SuppressWelcomeMessageExpiry
作为DateTime。这样,信息是按用户设置的,而不是每个cookie设置的。它允许应用程序更具可伸缩性,因为它使用户可以选择在到期时间之前将其重新打开。