【问题标题】:Storing arrays in cookies在 cookie 中存储数组
【发布时间】:2012-07-08 02:45:20
【问题描述】:

我需要在 cookie 中存储一些数组数据,我一直在研究最好的方法,很多人似乎说使用 serialize 是要走的路,但是在这个线程中:

PHP how to stringify array and store in cookie

..有人建议不要将其用作“序列化将调用序列化类的构造函数。这很糟糕,因为它会导致代码执行。”

所以我想知道我还有哪些其他选择? base64_encode呢?

我不能使用sessions,因为我需要在浏览器关闭后保留数据;虽然我也担心 Cookies 4KB 限制。

FWIW 我正在存储存储在某人购物车中的购物车数据,当他们回来时需要将其加载回他们的购物车中。

【问题讨论】:

    标签: php arrays cookies


    【解决方案1】:

    如何生成唯一 ID,将其存储在 cookie 中,并将序列化数组和 ID 存储在数据库中?

    例子:

    // ------------ STORING TO COOKIE AND DATABASE ------------ //
    $id = uniqid();
    setcookie("id", $id, time()+60*60*24); // 1 day
    
    $serialized = serialize($array);
    mysql_query("INSERT INTO yourTable (id, array) VALUES ('$id', '$serialized')");
    
    
    // ------------ SELECTING FROM DATABASE ------------ //
    if(!isset($_COOKIE['id'])) die();
    $id = mysql_real_escape_string($_COOKIE['id']);
    
    $result = mysql_query("SELECT array FROM yourTable WHERE id = $id LIMIT 1");
    if(!is_resource($result)) die();
    $serialized = mysql_result($result, 0);
    $array = unserialize($serialized);
    

    【讨论】:

    • +1 似乎是最好的解决方案,因为强烈建议不要使用 cookie 来存储身份或次要设置以外的内容。
    【解决方案2】:

    Cookie 不是存储用户数据的最佳方式 用户必须在您的站点上获得授权,并且所有数据必须通过 user_id 存储在数据库中

    【讨论】:

      【解决方案3】:

      扩展之前的 cmets 和 answrs,您应该努力避免 data 存储在 cookie 中,而不是 指向数据的指针,例如 ID到数据库行。

      假设所有客户端都是敌人(我认为这是合理的假设),一个错误的 cookie——无论是恶意的还是简单的错误——将不会造成太大的伤害,如果它只包含一个指针:

      • 无效:静默丢弃
      • 错误:通过将 ID 与请求它的用户进行比较来检查;如果是这样,请默默地放下它
      • 有效;使用它

      我个人更喜欢静默删除错误消息,因为我有直觉,这可能会让极少数真正恶意的用户更难。

      【讨论】:

        猜你喜欢
        • 2012-02-20
        • 1970-01-01
        • 2011-11-16
        • 2011-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多