我在跟我的老板介绍使用GET参数,而不值的网址有点说法。 例如
http://www.example.com/?logout
我看到这种链接的相当频繁在网络上,当然,这并不意味着它是一个很好的事情。 他担心,这是不标准,可能会导致意想不到的错误,所以他宁愿像我使用的东西,如:
http://www.example.com/?logout=yes
根据我的经验,我从来没有使用空的参数中遇到的任何问题,他们有时在这种情况下,如果让我更有意义(如?logout=no
就没有任何意义,所以价值“注销”无关我只测试参数服务器端的存在,而不是它的值)。 (它看起来也更清洁。)
但是我无法找到确认,这种用法实际上是有效的,所以真的永远不能引起任何问题。
你对此有什么联系呢?
RFC 2396,“统一资源标识符(URI):通用语法”§3.4,“查询构件”是在查询字符串信息的权威来源,并规定:
查询组件是一个信息串由资源进行解释。
[...]
中的查询部件,字符 “;”, “/”, “:”, “@”, “&”, “=”, “+”, “”,和 “$” 被保留 “?”。
RFC 2616, “超文本传输协议 - HTTP / 1.1”,§3.2.2, “HTTP 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)
这是完全正常的,并不会造成任何错误。 虽然,时下最框架都是基于MVC的,所以在URL,你需要提一个控制器和一个动作 ,所以它看起来更像/users/logout
(顺便说一句,也StackOverflow上使用该URL来注销用户)。
这可能会导致错误给我的说法听起来像你的应用程序手动访问原始$_GET
,我绝对认为,建设应用程序没有一个框架(通常提供一个MVC堆栈和路由器/调度器)是这里真正危险的事。