将数组存储在cookie中是否安全?

时间:2012-08-17 13:25:52

标签: php arrays security cookies

我有一个脚本,它接受数组来对它们进行随机播放,然后将它们存储到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;
}

1 个答案:

答案 0 :(得分:0)

自问问题后,您似乎已用次要答案更新了问题。

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

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

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