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