簡體   English   中英

無法使用標題重定向(位置:)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM