2011-07-07 11 views
7

http://site.com/?status=4387hg843hg89473gh87934h89g734hg8973hg9873hg8973h4987g3h489g7h89h849g5¿Cuánto tiempo puede durar un argumento de consulta URL?

Cuál es el tamaño máximo de status que PHP puede leer?

Deseo pasar mensajes de error/éxito al iniciar sesión o al iniciar sesión, y la única forma en que puedo hacer esto es redireccionando a una URL y agregando los mensajes como argumentos a esa URL.

como:

<?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(); 

(si sabes diferentes maneras de hacer esto, por favor dime;)

Respuesta

9

Según RFC2616 Section 3.2.1:

protocolo HTTP no pone un límite a priori de la longitud de un URI. Los servidores DEBEN ser capaces de manejar el URI de cualquier recurso que presten servicios, y DEBERÍA ser capaz de manejar URI de longitud ilimitada si proporcionan formularios basados ​​en GET que podrían generar tales URI. Un servidor DEBE devolver el estado 414 (Request-URI Demasiado) si un URI es más largo que el servidor puede manejar (consulte sección 10.4.15).

Dicho esto, muchos navegadores no permiten URL de longitud infinita. Por ejemplo, Internet Explorer tiene un limit of 2,083 characters.

En su caso, le sugiero que use una variable de sesión para almacenar el error y una vez que se muestre elimínelo.

El archivo que produce los errores:

<?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(); 

La otra página:

<?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']); 
} 
+0

+1 estaba a punto de escribir lo mismo –

+0

gracias, lo intentaré – Alex

+0

Creo que cuando dijiste infinito, querías decir finito. –

1

Esto es más dependiente del navegador del usuario que cualquier otra cosa. Por ejemplo, Internet Explorer no admite URL que tengan más de 2083 caracteres. PHP debe manejar bien hasta (y mucho) ese límite. Evitar base64_encode (que no es necesario) ayudará. Use urlencode en su lugar (suponiendo que no esté pasando ningún dato binario).

Estoy seguro de que a las personas les encantaría ayudar con diferentes formas de hacerlo, pero tendrías que proporcionar más código.

+0

Recuerdo que en el día IE4 (o era IE5 o IE6 o el navegador Netscape? 3? Me estoy poniendo viejo ...) solo admitiría 256 caracteres en la cadena de consulta. Buenos tiempos de hecho. –

+0

Hmm, suena familiar. No puedo decir que recuerdo qué navegador. –

1

Mi sugerencia es utilizar HTTP POST en lugar de HTTP GET

+0

Pensé en eso, pero ¿cómo envío '$ _POST'? – Alex

+0

Curl ayudaría – Nabeel

+0

Si es un formulario, agregue 'method =" post "' a la etiqueta '

'. –

Cuestiones relacionadas