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

Php 将数组存储在cookie中是否安全?,php,arrays,security,cookies,Php,Arrays,Security,Cookies,我有一个脚本,它使用数组来洗牌,然后将它们存储到一个cookie中,这样用户将只洗牌一次数组 以下是脚本: $shufflecookie = $_COOKIE['shuffle'];     if (isset($_COOKIE['shuffle'])) {   $items = unserialize(gzuncompress(base64_decode($shufflecookie))); } else {   shuffle($items);   $items_s

我有一个脚本,它使用数组来洗牌,然后将它们存储到一个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;
}

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

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

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


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

定义“安全”。。。如果用户有数据,它可以解密数据。这听起来像是缓存。你看过像APC或memcached这样的实际缓存解决方案吗?用户可以禁用cookie,也请记住这一点。如果用户禁用cookie没有问题。他们不会得到随机数组。我是否可以向字符串中添加盐,以便用户在不知道的情况下无法解密它?这样我就可以在服务器端自己解密了,因为我知道salt?你可以在会话中保存不同的排列。会话_start();//存储会话数据$\u会话['shuffle']=$shuffledArray;这比使用cookie更安全,但黑客原则上仍然可以劫持会话并以这种方式访问数据。取决于数据的敏感程度。