保存数据以分页查询的最安全方法

时间:2014-06-18 06:41:03

标签: php cookies pagination

我有一个使用ID列表作为输入的查询(例如“WHERE XX IN(1,2,3,4)”)并且结果太多而无法在单个网页上显示。我计划的是什么要做的是限制结果并对它们进行分页。使用MySql,我添加了“LIMIT X OFFSET Z”。

我现在的问题是如何将信息传递给每一页。我可以使用其中的ID列表生成分页链接(例如<a href='link.php?i=1,2,3&page=1>1</a>),或者我可以将它们存储在某处。因为我正在使用php,所以我想使用SESSION存储它们或者将它们写在cookie中。使用数据库是否过度?我现在可以使用cookie制作一个简单的解决方案,稍后再进行更改。在cookie中使用ID不是安全问题。即使用户将id添加到该列表也无关紧要。

SO上有一些答案,但似乎都没有解决所有可能性。

1 个答案:

答案 0 :(得分:1)

是的,使用数据库是过度的。根据您的Web应用程序,会话和URL都是解决此问题的好方法。

我认为这两者的最佳解决方案是在URL中包含分页。在分享指向您应用的链接时,这会有很大帮助。 (Immagine向同事发送指向您应用中页面的链接......并且您正在使用会话进行分页)

在代码中为&#34;页面大小&#34;设置一个常量然后将其乘以查询字符串中的页码以获取偏移量。这是一个简化的代码示例来说明:

<?php
    $limit = 30; // records per page to have more/less change this
    $page = 0;   // if not set, $page is 0 (first page)
    if (isset($_GET['page']) {
        $page = (int)$_GET['page']; // cast to int, to drop funny chars etc.
    }
    $offset = $page * $limit;
    $query = "SELECT * FROM a_table WHERE some_col IN (1,2,3,4)";

    // ... then, to add offset data to your query:
    $query += " LIMIT $limit OFFSET $offset"; // mind the single space

然后,您的链接应包含下一页的page arg:echo "link.php?i=1,2,3&page=".$page+1;递增(或者有一个循环用于打印指向下一个n页面的链接)。

单词警告

  • 请勿使用Cookie存储分页数据。 Cookie是需要在请求 - 响应生命周期之间来回发送(有时是不必要的)的数据。而且你不应该首先信任cookie;)
  • 看起来您正在从查询字符串中获取WHERE XX IN (1,2,3,4)的数据。请注意,执行此操作时,请注意sql注入。