【发布时间】:2012-10-12 01:49:31
【问题描述】:
我有一个脚本,它使用数组来打乱它们,然后将它们存储到一个 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;
}
【问题讨论】:
-
Define 'safe'...如果用户有数据,就可以解密数据。
-
这听起来有点像缓存。您是否查看过 APC 或 memcached 等实际缓存解决方案?
-
用户可以禁用cookie,记住这一点。
-
如果用户禁用 cookie 也没问题。他们只是不会得到随机数组。能不能给字符串加盐,让用户在不知情的情况下无法解密?这样我就可以在服务器端解密它,因为我会知道盐?
-
您可以在会话中保存不同的排列。 session_start(); // 存储会话数据 $_SESSION['shuffle'] = $shuffledArray;这比使用 cookie 更安全,但原则上黑客仍然可以劫持会话并以这种方式访问数据。取决于您的数据的敏感程度。
标签: php arrays security cookies