4

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

PHP如何将数组字符串化并存储在cookie中

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

所以我想知道我还有什么其他选择?怎么样base64_encode

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

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

4

3 回答 3

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);
于 2012-07-08T10:57:34.360 回答
4

扩展先前的评论和答案,您应该非常努力地避免将数据存储在 cookie 中,而不是指向 data 的指针,例如指向数据库行的 ID。

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

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

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

于 2012-07-08T11:05:48.550 回答
0

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

于 2012-07-08T11:04:34.767 回答