1

我有一个脚本,它需要对数组进行洗牌,然后将它们存储到一个 cookie 中,这样用户只会对数组进行一次洗牌。

这是脚本:

$shufflecookie = $_COOKIE['shuffle'];
                
if (isset($_COOKIE['shuffle'])) {
  $items = unserialize(gzuncompress(base64_decode($shufflecookie)));
}
else {
  shuffle($items);
  $items_serialized = base64_encode(gzcompress(serialize($items)));
  setcookie("shuffle", $items_serialized, 0, "/");
}

这样做安全吗?或者也许有更好的方法来存储这些数据?谢谢

UPD。感谢您的帮助。我所做的只是用会话替换cookie。所以新代码是:

$shufflecookie = $_SESSION["shuffle"];
                
if (isset($_SESSION["shuffle"])) {
  $items = unserialize(gzuncompress(base64_decode($shufflecookie)));
}
else {
  shuffle($items);
  $items_serialized = base64_encode(gzcompress(serialize($items)));
  $_SESSION["shuffle"] = $items_serialized;
}
4

1 回答 1

0

自从提出问题以来,您似乎已经用次要答案更新了问题。

在 cookie 中存储数据的一个缺点是它以明文形式存储在客户端电脑上(除非首先加密服务器端)。即使您确实加密了数据,用户也总是有可能设法解密它。取决于 cookie 的生存时间,cookie 也有可能在浏览器的生命周期之后仍然存在(即关闭后)。这引入了一种可能性,即在稍后请求页面时将 cookie 中的数据发送回服务器之前,可能不是您的客户端更改了 cookie 中的数据。

另一方面,将信息存储在会话中有助于确保信息存储在服务器端并阻止客户端查看此信息。通常在使用会话时,您只需将会话 ID 存储在 cookie 中即可识别用户属于哪个会话。

因此,任何应该安全的数据都应该保存在会话而不是 cookie 中。

于 2012-10-11T17:49:31.580 回答