Я немного спорю с моим боссом о URL-адресах, используя параметры GET без значения. Например
http://www.example.com/?logout
Я вижу эту ссылку довольно часто в Интернете, но, конечно, это не значит, что это хорошо. Он опасается, что это не стандарт и может привести к неожиданным ошибкам, поэтому он предпочел бы, чтобы я использовал что-то вроде:
http://www.example.com/?logout=yes
По моему опыту, я никогда не сталкивался с какой-либо проблемой с использованием пустых параметров, и они иногда имеют для меня больше смысла (как в этом случае, где ?logout=no
не имеет никакого смысла, поэтому значение «logout» не имеет значения и я бы тестировал только наличие параметра server-side, а не его значение). (Он также выглядит чище.)
Однако я не могу найти подтверждение того, что этот вид использования действительно действителен и поэтому действительно не может вызвать никаких проблем.
У вас есть ссылка на это?
RFC 2396, «Унифицированные идентификаторы ресурсов (URI): общий синтаксис», §3.4, «Компонент запроса» является авторитетным источником информации о строке запроса и содержит:
Компонент запроса представляет собой строку информации, которая будет интерпретироваться ресурсом.
[…]
Внутри компонента запроса сохраняются символы «;», «/», «?», «:», «@», «&», «=», «+», «,» И «$».
RFC 2616, «Протокол передачи гипертекста – HTTP / 1.1», §3.2.2, «http URL», не переопределяет это.
Короче говоря, строка запроса, которую вы даете («выход из системы»), совершенно верна.
Значение не требуется для того, чтобы ключ имел какой-либо эффект. Это не делает 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
из 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
(BTW, также StackOverflow использует этот URL для выхода из системы;).
Утверждение, что оно может вызвать ошибки для меня, похоже на то, что ваши приложения вручную обращаются к необработанному $_GET
, и я определенно считаю, что создание приложений без рамки (которая обычно предоставляет стек MVC и маршрутизатор / диспетчер) является настоящей опасной вещью здесь.