[英]Unable to redirect using header(Location:)
我無法從我的站點的登錄頁面重定向到儀表板。 當我嘗試通過提供正確的用戶名和密碼登錄時,它再次向我顯示登錄頁面,但是當我通過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();
}
?>
根據我使用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");
請評價我的回答,因為我是新用戶,暫不評價其他人:-)
我在2分鍾前遇到同樣的問題......現在解決了:)
嘗試使用JavaScript。 在php代碼中重新設置標頭位置
?>
<script type="text/javascript">
window.location ="http://www.sirobd.com/index.php";
</script>
<?php
嘗試使用meta代碼。 在內容屬性中,您可以更改數字,它是重定向之前的第二個時間
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.";
}
嘗試添加:
session_write_close();
在標題調用之前,然后添加exit以獲得良好的度量。
session_write_close();
header('Location: admwelcome.php');
exit;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.