使用 php 和 cookies 按日期排序 "recently viewed pages" 的最佳方法是什么?

what is the best way to sort "recently viewed pages" by date with php and cookies?

我正在使用以下代码在用户的浏览器中存储最近查看的带有 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 的到期日期,所以这是不可能的。

让 SQL 为您处理。如果您按 id 排序,则:

SELECT page_id, name
FROM db_pages
WHERE page_id IN (".$recently_cookie.")
ORDER BY page_id ASC
LIMIT 0,12

如果您有实际的日期列,您可以相应地更改 page_idASC为升序,DESC为降序。

旁注

您当前的代码开启了 SQL 注入的可能性。处理这种情况超出了这个问题的范围,但值得研究。