在cookie中存储数组

时间:2012-07-08 10:55:43

标签: php arrays cookies

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

PHP how to stringify array and store in cookie

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

所以我想知道我还有其他选择吗?那么base64_encode呢?

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

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

3 个答案:

答案 0 :(得分:5)

如何生成唯一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 :(得分:4)

扩展之前的评论和回答,您应该尽量避免将数据存储在Cookie中,而不是指向数据的指针,例如ID到数据库行。

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

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

我非常喜欢沉默地删除错误消息,因为我有直觉,这可能会让那些极少数真正恶意的用户更加难以接受。

答案 2 :(得分:0)

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

存储在数据库中