URL查询参数可以有多长时间?

时间:2011-07-07 22:53:09

标签: php validation url redirect

  

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

PHP可以读取的status的最大大小是多少?

我想在登录或注册时传递错误/成功消息,我能做到的唯一方法是重定向到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 个答案:

答案 0 :(得分:9)

根据RFC2616 Section 3.2.1

  

HTTP协议不会放置任何内容   URI的长度的先验限制。   服务器必须能够处理URI   他们所服务的任何资源,并且应该   能够处理无界的URI   长度,如果他们提供基于GET的表格   可以生成这样的URI。一个   服务器应该返回414(Request-URI   如果URI更长,则状态太长   比服务器可以处理(见   第10.4.15节。

据说,许多浏览器不允许无限长度的URL。例如,Internet Explorer有limit of 2,083 characters

在您的情况下,我建议使用会话变量来存储错误,一旦显示错误就将其删除。

产生错误的文件:

<?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 :(得分:1)

这更依赖于用户的浏览器而不是其他任何东西。例如,Internet Explorer不支持超过2083个字符的URL。 PHP应该可以很好地处理(以及过去)这个限制。避免base64_encode(这是不必要的)会有所帮助。请改用urlencode(假设您没有传递任何二进制数据)。

我相信人们会喜欢用不同的方式来帮助你,但是你必须提供更多代码。

答案 2 :(得分:1)

我的建议是使用HTTP POST而不是HTTP GET