我和我的老板谈论使用GET参数而没有值的URL.例如
http://www.example.com/?logout
我经常在网上看到这种链接,但当然,这并不意味着它是一件好事.他担心这不是标准的,可能导致意外错误,所以他更喜欢我使用类似的东西:
http://www.example.com/?logout=yes
根据我的经验,我从来没有遇到任何使用空参数的问题,它们有时对我更有意义(就像在这种情况下,?logout=no没有任何意义,所以"注销"的价值是无关紧要的,我只会测试参数服务器端的存在,而不是它的值).(它看起来也更干净.)
但是我无法确认这种用法实际上是否有效,因此实际上不会导致任何问题.
你有这方面的链接吗?
Ign*_*ams 17
RFC 2396,"统一资源标识符(URI):通用语法",§3.4,"查询组件"是查询字符串的权威信息来源,并指出:
查询组件是要由资源解释的信息字符串.
[...]
在查询组件中,保留字符";","/","?",":","@","&","=","+",","和"$".
RFC 2616,"超文本传输协议 - HTTP/1.1",§3.2.2,"http URL",不重新定义.
简而言之,您提供的查询字符串("注销")完全有效.
密钥不需要值就可以产生任何影响.它也不会使URL的有效性降低,URL RFC1738不会将其列为URL的必需部分.
如果你真的不需要价值,那只是一个偏好问题.
http://example.com/?logout
Run Code Online (Sandbox Code Playgroud)
就像有效的URL一样
http://example.com/?logout=yes
Run Code Online (Sandbox Code Playgroud)
它的所有不同之处在于,如果你想确保"是"位是绝对设置的,你可以检查它的值.喜欢:
if(isset($_GET['logout']) && $_GET['logout'] == "yes") {
// Only proceed if the value is explicitly set to yes
Run Code Online (Sandbox Code Playgroud)
如果您只想知道logout密钥是否设置在URL中的某个位置,那么仅列出没有赋值的密钥就足够了.然后你可以这样检查:
if(isset($_GET['logout'])) {
// Continue regardless of what the value is set to (or if it's left empty)
Run Code Online (Sandbox Code Playgroud)