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();
(如果你知道不同的方法,请告诉我;)
答案 0 :(得分:9)
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