Подтвердить что ты не робот

Неправильно ли использовать параметр GET (в URL) без значения?

Я немного спорю с моим боссом о URL-адресах, используя параметры GET без значения. Например.

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

Я вижу эту ссылку довольно часто в Интернете, но, конечно, это не значит, что это хорошо. Он опасается, что это не стандартно и может привести к неожиданным ошибкам, поэтому он предпочел бы, чтобы я использовал что-то вроде:

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

По моему опыту, я никогда не сталкивался с какой-либо проблемой с использованием пустых параметров, и они иногда имеют для меня больше смысла (как в этом случае, где ?logout=no не имеет никакого смысла, поэтому значение "logout" не имеет значения, и я бы только тестировал наличие параметра server-side, а не его значение). (Он также выглядит более чистым.)

Однако я не могу найти подтверждение того, что этот вид использования действительно действителен и, следовательно, действительно не может вызвать никаких проблем.

У вас есть ссылка на это?

4b9b3361

Ответ 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 и маршрутизатор/диспетчер) - это реальный опасная вещь здесь.