我有以下功能在用户在我的网站上访问的每个单独的产品页面上设置一个cookie。
function setcookie() {
$entry_id = '787';
if (isset($_COOKIE['recently_viewed'])) {
$currentSession = unserialize($_COOKIE['recently_viewed']);
if (!in_array($entry_id, $currentSession)) {
if (count($currentSession) > 5) {
unset($currentSession[0]);
}
$currentSession[] = $entry_id;
} else {}
$currentSession = serialize($currentSession);
setcookie('recently_viewed', $currentSession, pow(2,31)-1, '/', '');
} else {
$recently_viewed[] = $entry_id;
$currentSession = serialize($recently_viewed);
setcookie('recently_viewed', $currentSession, pow(2,31)-1, '/', '');
}
}
在这个函数中,我试图限制存储在cookies数组中的项目数。
当cookies数组中有6个项目时,我想删除该数组中的第一个(最旧的)项目然后添加新项目(因此永远不会超过6个项目,但总是添加新项目)。
我使用了以下内容,但似乎并不总是有用。有时它会在超过5时删除第一个项目,但有时它会不断添加它们,因此超过6个。
if (count($currentSession) > 5) {
unset($currentSession[0]);
}
有谁能告诉我是否有更好的方法来实现这一目标?
答案 0 :(得分:1)
你绝对应该使用会话。
session_start();
$entry_id = '788';
if (!is_array($_SESSION['recently_viewed'])) {
$_SESSION['recently_viewed'] = array();
}
// add the item to the begining
array_unshift($_SESSION['recently_viewed'], $entry_id);
// ensure unique entries
$_SESSION['recently_viewed'] = array_unique($_SESSION['recently_viewed']);
// keep first 5 entries
$_SESSION['recently_viewed'] = array_slice($_SESSION['recently_viewed'], 0, 5);
echo 'recent: ' . print_r($_SESSION['recently_viewed'], true);
答案 1 :(得分:0)
if (count($currentSession) > 5) {
$arr = array_shift($currentSession);
}