使用哪种方法?

时间:2013-03-01 17:31:56

标签: php url post get

我在网站上有表格,用于搜索数据库中的对象。问题是用户可以搜索很多属性,所以我不确定是否应该使用POST方法将值传递给其他脚本,或者我是否应该将所有变量放在URL中并使其他脚本独立且只能使用链接。

例如,如果我使用GET方法,URL将如下所示:

/.../ searching_objects.php一个[优先] [健身房] = 0&安培;一个[优先] [俱乐部] = 1&安培;一个[优先] [店] = 1&安培;一个[优先] [餐厅] = 1安培;一个[优先] [酒馆] = 0&安培;一个[优先] [宠物] = 1&安培;一个[优先] [停车] = 0&安培;一个[人口] = 1&安培;一个[LAT] = nondef&安培;一个[LNG] = nondef&安培;一个[半径] = 500&安培;一个[大学] = 0

  • 在这种情况下,我的页面将独立于之前的页面,可以刷新,也可以不依赖于以前的脚本访问

但是,如果我使用POST方法,我的URL看起来像/.../searching_objects.php,或者可能只有很少的变量通过URL,用于切换页面。这种方法显然取决于以前的脚本。

根据这个问题,哪种方法更好?哪一个更加用户友好(在这些情况下,它是否优先考虑用户友好性?)?是否有一些安全理由为什么选择一种方法而不是其他方法呢?

2 个答案:

答案 0 :(得分:1)

你应该使用GET,因为POST意味着发布 / 创建来自表单的东西(比如文章)。搜索框通常被认为只是伪造正确的GET URL的工具。此外,人们通常只想通过复制和粘贴网址来保存特定搜索(只需查看Google如何管理它)。

他们都不是真的用户友好。而你应该不关心它。搜索网址从来都不是用户友好的。

如果您确保所有输入(就像您一直应该的那样),您就不必担心安全问题。特别是在搜索环境中,没有那么多的安全检查,你只需要从数据库中获取数据并打印它。只记得SQL注入(以及打印方面的XSS),你应该没问题。

答案 1 :(得分:1)

首先,与GET一起去吧。你正在获取数据,而不是发布它。 POST应该用于更改服务器上某些内容的操作。

至于长URL问题,您可以执行以下操作:

  • 分隔您的搜索页面 - 为不同的搜索类型提供不同的搜索页面。
  • 使用网址重写 - 利用.htaccessModRewrite将非常长的网址更改为更短,更漂亮的网址。

此外,您可能需要重新考虑如何布置搜索项目(不是在视觉方面,而是在数据管理方面)。考虑发布一个不同的问题,解释如何布置当前的搜索输入,以及如何改进它。