Как долго может быть аргумент запроса URL? - PullRequest
7 голосов
/ 08 июля 2011

http://site.com/?status=4387hg843hg89473gh87934h89g734hg8973hg9873hg8973h4987g3h489g7h89h849g5

Каков максимальный размер status, который может читать PHP?

Я хочу передавать сообщения об ошибках / успехе при входе в систему или регистрации, и единственный способ сделать это - перенаправить на URL-адрес и добавить сообщения в качестве аргументов к этому URL-адресу.

как:

<?php

 $errors = array(
   1 => 'Password must have between 6 and 20 characters',
   2 => 'User name must contain only A-Z, a-z and 0-9 characters',
   3 => 'Captcha code does not match',
 );

 $errors =  base64_encode(serialize($errors));

 header("Location: http://www.example.com/?status={$errors}");
 die();

(если вы знаете разные способы сделать это, пожалуйста, скажите мне;)

Ответы [ 3 ]

9 голосов
/ 08 июля 2011

Согласно RFC2616, раздел 3.2.1 :

Протокол HTTP не размещает априори ограничение на длину URI. Серверы ДОЛЖНЫ иметь возможность обрабатывать URI любого ресурса, которому они служат, и ДОЛЖНЫ быть в состоянии обрабатывать URI неограниченного длина, если они предоставляют формы на основе GET которые могут генерировать такие URI. Сервер ДОЛЖЕН вернуть 414 (Request-URI Too Long), если URI длиннее чем может обработать сервер (см. раздел 10.4.15).

С учетом вышесказанного многие браузеры не допускают URL-адреса бесконечной длины. Например, Internet Explorer имеет ограничение в 2 083 символа .

В вашем случае я бы предложил использовать переменную сеанса для хранения ошибки, а после ее отображения удалить ее.

Файл, выдающий ошибки:

<?php

 $errors = array(
   1 => 'Password must have between 6 and 20 characters',
   2 => 'User name must contain only A-Z, a-z and 0-9 characters',
   3 => 'Captcha code does not match',
 );

 session_start();
 $_SESSION['errors'] = $errors;

 header("Location: http://www.example.com/");
 die();

Другая страница:

<?php

 session_start();

 if ( ! empty($_SESSION['errors']) )
 { 
   // Do something with the errors.

   // Remove the errors from the session so they don't get displayed again later.
   unset($_SESSION['errors']);
 }
1 голос
/ 08 июля 2011

Я предлагаю использовать HTTP POST вместо HTTP GET

1 голос
/ 08 июля 2011

Это больше зависит от браузера пользователя, чем что-либо еще.Например, Internet Explorer не поддерживает URL-адреса, содержащие более 2083 символов.PHP должен хорошо обрабатывать до (и уже давно) этот предел.Избегание base64_encode (что не нужно) поможет.Вместо этого используйте urlencode (при условии, что вы не передаете двоичные данные).

Я уверен, что люди хотели бы помочь с различными способами сделать это, но вам придется предоставить больше кода.1005 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...