【问题标题】:Is it a bad practice to use a GET parameter (in URL) with no value?使用没有值的 GET 参数(在 URL 中)是一种不好的做法吗?
【发布时间】:2013-01-07 10:30:42
【问题描述】:

我和我的老板就使用没有价值的 GET 参数的 URL 发生了一点争论。例如

http://www.example.com/?logout

我经常在网络上看到这种链接,但当然,这并不意味着它是一件好事。他担心这不标准并且可能导致意外错误,所以他宁愿我使用类似的东西:

http://www.example.com/?logout=yes

根据我的经验,我从来没有遇到过使用空参数的任何问题,而且它们有时对我来说更有意义(比如在这种情况下,?logout=no 没有任何意义,所以“注销”的值是无关紧要的,我只会测试参数服务器端的存在,而不是它的值)。 (看起来也更干净。)

但是我无法确认这种用法实际上是有效的,因此真的不会导致任何问题。

你有这方面的链接吗?

【问题讨论】:

  • 只要您只是使用isset($_GET['logout']); 并且对此感到满意,我认为没有任何问题。
  • 正是我在做什么。 :)
  • 链接 example.com/?logout 重定向 (301) 到 example.com/?logout= 所以你应该牢记 SEO。

标签: php url get


【解决方案1】:

RFC 2396,“统一资源标识符 (URI):通用语法”,第 3.4 节,“查询组件”是查询字符串的权威信息来源,并指出:

查询组件是要被解释的信息字符串 资源。

[...]

在查询组件中,字符“;”、“/”、“?”、“:”、“@”、 "&"、"="、"+"、"," 和 "$" 是保留的。

RFC 2616,“超文本传输​​协议 -- HTTP/1.1”,§3.2.2,“http URL”,没有重新定义。

总之,你给出的查询字符串(“logout”)是完全有效的。

【讨论】:

【解决方案2】:

值不是必需键才能产生任何效果。它也不会降低 URL 的有效性,URL RFC1738 不会将其列为 URL 的必需部分。

如果你真的不需要一个值,那只是一个偏好问题。

http://example.com/?logout

一样是一个有效的 URL
http://example.com/?logout=yes

所有不同之处在于,如果您想确保“是”位被绝对设置,您可以检查它的值。喜欢:

if(isset($_GET['logout']) && $_GET['logout'] == "yes") {
    // Only proceed if the value is explicitly set to yes

如果您只想知道 logout 键是否设置在 URL 中的某个位置,只需列出没有分配值的键就足够了。然后你可以像这样检查它:

if(isset($_GET['logout'])) {
    // Continue regardless of what the value is set to (or if it's left empty)

【讨论】:

【解决方案3】:

完全没问题,不会导致任何错误。虽然,现在大多数框架都是基于 MVC 的,所以在 URL 中你需要提到一个 controller 和一个 action,所以它看起来更像/users/logout(顺便说一句,也是 StackOverflow使用该 URL 将用户注销;)。

可能导致错误对我来说听起来像是您的应用程序手动访问原始 $_GET,我绝对认为构建没有框架的应用程序(通常提供 MVC 堆栈和路由器/调度程序)是这里真正危险的东西。

【讨论】:

  • “真正危险的事情”如“如果你真的必须在你的例子中找到危险的东西”,或者如“永远不要这样做”?
  • 前者 :) 尽管如此,使用纯 PHP 或 vanilla JS 进行开发,或者无论如何只使用没有任何库的编程语言都不是明智的做法,因为明显的原因
猜你喜欢
  • 1970-01-01
  • 2017-05-06
  • 2013-01-27
  • 2018-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-22
相关资源
最近更新 更多