该页面不会重定向IE9,但可以在Chrome和IE 11中使用。当用户单击没有完成凭据的登录按钮时,代码应显示文本和错误消息。该页面会粘贴到网址http://xxx.xxx.com/customer.php?action_nm=custlogin,并且不会响应以下代码。
IE9及以下版本是否存在导致重定向无法在PHP中运行的已知问题?
if(!empty($_POST["email"])){
$_SESSION["Email"] = $_POST["email"];
redirect("customer.php?action_nm=custlogin&action=xpwd");
exit;
}
else
{
redirect("customer.php?action_nm=custlogin&action=nocredentials");
exit;
}
}
这是下面的功能:
function redirect($s){
echo '<script language="JavaScript">
function redir() { document.location="'.$s.'"; }
console.log("' . $s . '")
redir();
</script>';
}
答案 0 :(得分:1)
我认为您的重定向功能出现故障,因为您没有在那里发布,我发布了自己的版本。
我使用此功能进行重定向,到目前为止还没有任何问题。
function redirect($url) {
try {
if (!headers_sent()) {
@header('Location: ' . $url);
exit;
} else
throw new Exception();
} catch (Exception $ex) {
// Headers already sent!! Redirect via Javascript?
echo '<script type="text/javascript">';
echo 'window.location.href="' . $url . '";';
echo '</script>';
// Javascript disabled, redirect via metatags?
echo '<noscript>';
echo '<meta http-equiv="refresh" content="0;url=' . $url . '" />';
echo '</noscript>';
exit;
}
}
答案 1 :(得分:0)
为了获得重定向,您必须将响应的HTTP标头放入以下行:
Location: customer.php?action_nm=custlogin&action=xpwd
现在,要将 ANYTHING 放入标题中,您可能还没有向输出缓冲区写入任何内容,或者您可以做的就是将内容放入HTTP正文中。
换句话说,无论你在该行之前呈现的是什么(即使是空白空间)都会使这种方法不起作用。
PHP的最佳实践是在第一个字节之外打开标记:
<?php
并且永远不要在文件中关闭它。
现在,在任何其他输出之前,您可以使用header()
函数将该行放入HTTP标头。所以你的页面应该是这样的:
<?php
header('Location: customer.php?action_nm=custlogin&action=xpwd');
毫无疑问,这是有效的。如果不是,那是因为响应脚本的某个部分已经填充了输出缓冲区。没有办法绕过这个论点。