我无法从我的网站的登录页面重定向到信息中心。当我尝试通过提供正确的用户名和密码登录时,它再次向我显示登录页面,但是当我通过URL访问我的站点的仪表板时,我可以访问它,这证明会话已经开始。 以下是我的代码:
<?php
error_reporting(0);
session_start();
include_once '../db.php';
if(isset($_REQUEST['admsubmit']))
{
$result=executeQuery("select * from adminlogin where admname='".htmlspecialchars($_REQUEST['name'],ENT_QUOTES)."' and admpassword='".md5(htmlspecialchars($_REQUEST['password'],ENT_QUOTES))."'");
// $result=mysql_query("select * from adminlogin where admname='".htmlspecialchars($_REQUEST['name'])."' and admpassword='".md5(htmlspecialchars($_REQUEST['password']))."'");
if(mysql_num_rows($result)>0)
{
$r=mysql_fetch_array($result);
if(strcmp($r['admpassword'],md5(htmlspecialchars($_REQUEST['password'],ENT_QUOTES)))==0)
{
$_SESSION['admname']=htmlspecialchars_decode($r['admname'],ENT_QUOTES);
unset($_GLOBALS['message']);
header('Location: admwelcome.php');
}else
{
$_GLOBALS['message']="Check Your user name and Password.";
}
}
else
{
$_GLOBALS['message']="Check Your user name and Password.";
}
closedb();
}
?>
答案 0 :(得分:1)
根据我使用PHP的经验,问题是在清空页面缓冲区后无法重定向用户。问题是您必须先将标题发送到其他任何内容才能识别它们。您的脚本在发送导致用户重定向的Location头之前发送html数据,这就是重定向不起作用的原因。
要解决此问题,您必须在PHP代码的第一行启动缓冲区以防止发送html数据,并在文件末尾将其清空(如果缓冲区已满,它将自动清空)。您还可以在配置文件中指定缓冲区大小。
要打开output_buffering,请将以下行添加到.htaccess文件
php_flag output_buffering on
要启动缓冲区,请使用 ob_start()函数(http://www.php.net/manual/ro/function.ob-start.php)。
要清空缓冲区以防止它未填充,请使用 ob_end_flush()函数(http://www.php.net/manual/ro/function.ob-end-flush.php)。
您的代码应为:
<?php
ob_start(); // start the page buffer so html data is not sent before the header
error_reporting(0);
session_start();
include_once '../db.php';
if(isset($_REQUEST['admsubmit']))
{
$result=executeQuery("select * from adminlogin where admname='".htmlspecialchars($_REQUEST['name'],ENT_QUOTES)."' and admpassword='".md5(htmlspecialchars($_REQUEST['password'],ENT_QUOTES))."'");
// $result=mysql_query("select * from adminlogin where admname='".htmlspecialchars($_REQUEST['name'])."' and admpassword='".md5(htmlspecialchars($_REQUEST['password']))."'");
if(mysql_num_rows($result)>0)
{
$r=mysql_fetch_array($result);
if(strcmp($r['admpassword'],md5(htmlspecialchars($_REQUEST['password'],ENT_QUOTES)))==0)
{
$_SESSION['admname']=htmlspecialchars_decode($r['admname'],ENT_QUOTES);
unset($_GLOBALS['message']);
header('Location: admwelcome.php');
}else
{
$_GLOBALS['message']="Check Your user name and Password.";
}
}
else
{
$_GLOBALS['message']="Check Your user name and Password.";
}
closedb();
}
ob_end_flush(); // empty the buffer and send the html code back to the browser
?>
我还使用重定向功能,因此我可以更轻松地重定向:
function redirect($to) {
header("Location: " . $to);
}
现在你可以像这样重定向(看起来更容易):
redirect("admwelcome.php");
请评价我的答案,因为我是新用户,暂不评价其他人: - )
答案 1 :(得分:1)
我在2分钟前遇到同样的问题......现在已经解决了:)
尝试使用JavaScript。在php代码中重新设置标头位置
?>
<script type="text/javascript">
window.location ="http://www.sirobd.com/index.php";
</script>
<?php
答案 2 :(得分:0)
使用meta尝试此代码。在content属性中,您可以更改数字,它是重定向之前的秒数
if(strcmp($r['admpassword'],md5(htmlspecialchars($_REQUEST['password'],ENT_QUOTES)))==0){
$_SESSION['admname']=htmlspecialchars_decode($r['admname'],ENT_QUOTES);
unset($_GLOBALS['message']);
echo '<meta http-equiv="Refresh" content="2;url=http://yourWebsite/admwelcome.php">';
}else{
$_GLOBALS['message']="Check Your user name and Password.";
}
答案 3 :(得分:0)
尝试添加:
session_write_close();
在标题调用之前,然后添加exit for good measure。
session_write_close();
header('Location: admwelcome.php');
exit;