我使用以下代码在用户的浏览器中存储最近查看的带有cookie的页面,然后在稍后检索页面以显示它们。
我当前注意到的问题是,它只会按ID排序页面,从最高ID开始,但因为我只显示最多12页,所以它并不是按访问日期对它们进行排序(即最近的那些,但是由ID。
Cookie设置如下:
setcookie('recently_visited['.$_REQUEST['page_id'].']',
$_REQUEST['page_id'], time() + 86400);
然后通过:
检索 $cookie_array = array_reverse($_COOKIE['recently_visited'], true);
$cookie_array = array_values($cookie_array);
for($i = 0; $i <= 11; $i++){
if(isset($cookie_array[$i])){
$new_array[] = $cookie_array[$i];
}
}
$recently_cookie = implode(",",$new_array);
// making sure the cookie content contains only numbers
if (ctype_digit(str_replace(",", "", $recently_cookie))) {
$clean_string = '1';
} else {
$clean_string = '0';
}
if($recently_cookie) {
if ($clean_string == '1'){
// get the pages for display
$sql_select_recent_items = $db->query("SELECT page_id, name
FROM db_pages WHERE page_id IN (".$recently_cookie.") LIMIT 0,12");
}
对他们进行排序最简单的方法是什么,但访问日期?最近的那些。
我知道无法获取Cookie的失效日期,因此无法实现。
答案 0 :(得分:1)
让SQL为您处理。如果您按id
排序,则:
SELECT page_id, name
FROM db_pages
WHERE page_id IN (".$recently_cookie.")
ORDER BY page_id ASC
LIMIT 0,12
如果您有实际的日期列,则可以相应地更改page_id
。 ASC
用于升序,DESC
用于降序。
SIDE NOTE
您当前的代码开启了SQL注入的可能性。处理这种情况超出了这个问题的范围,但值得深入研究。