如何创建一个可以存储list / Array的cookie

时间:2016-01-21 21:43:48

标签: c# jquery asp.net asp.net-mvc cookies

在我目前的项目中,每次他/她登录网站时我都必须显示一个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值,我觉得可能有更好的方法来实现这一点。建议请.. !!

2 个答案:

答案 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设置的。它允许应用程序更具可伸缩性,因为它使用户可以选择在到期时间之前将其重新打开。