【问题标题】:how to create a cookie which can store list/Array如何创建一个可以存储列表/数组的cookie
【发布时间】:2016-04-28 08:33:54
【问题描述】:

在我当前的项目中,每次他/她登录网站时,我都必须显示一个弹出窗口(欢迎信息)。在弹出窗口中,用户可以选择(Onclick CheckBox)隐藏弹出窗口 30 天。

当他/她单击弹出窗口上的复选框时,我通过将 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 值,我都觉得可能有更好的方法来实现这一点。建议请..!!

【问题讨论】:

  • $.cookie(UniqueId)?
  • 除非两个用户在同一台​​计算机上使用同一个浏览器登录网站,否则 cookie 中的用户永远不会超过一个。这是您需要处理的情况吗?其次,将用户 ID 保存在未加密的 cookie 中是一个非常糟糕的主意。
  • Cookie 本地存储在用户的计算机上。我不明白为什么你只有一个用户时应该有多个 uuid。

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


【解决方案1】:

您正在以 UniqueID 作为名称保存 cookie。只需检查该 cookie 是否已直接存在:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-26
      • 2010-12-29
      • 1970-01-01
      • 2019-10-23
      • 2013-03-03
      • 1970-01-01
      • 2016-03-03
      相关资源
      最近更新 更多