使用php和cookies按日期排序“最近查看过的页面”的最佳方法是什么?

时间:2015-04-13 17:17:54

标签: php sorting 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的失效日期,因此无法实现。

1 个答案:

答案 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_idASC用于升序,DESC用于降序。

SIDE NOTE

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