簡體   English   中英

為什么我的php重定向不起作用?

[英]why doesn't my php redirect work?

我正在寫一個登錄腳本。 我的db.php沒有回顯/打印任何內容,所以為什么沒有header(“ Location:index.php”); 成功登錄后重定向? 登錄信息正確。 我知道我需要清理輸入內容,但目前這不是問題。

 <?php
        require('db.php');
        $username = $_POST['un'];
        $password = $_POST['pw'];
        $qry="SELECT uid FROM users WHERE name='$username' AND pass='".md5($password)."'";
        $result=mysql_query($qry);
        if(mysql_num_rows($result) == 1){
            session_regenerate_id();
            $user = mysql_fetch_assoc($result);
            $_SESSION['S_UID'] = $user['uid'];
            session_write_close();
            header("Location: index.php");
            exit();
        }else{
            echo "<center><form action='index.php' name='login'>Login failed! Please try again with correct username and password.<br><input type='submit' name='failed' value='Return to Login'></form></center>";
            exit();
        }
    ?>

僅在調用函數之前腳本未發送任何輸出的情況下,函數頭才起作用。 檢查上面的代碼是否回顯了某些內容。

如果不是,請檢查上面的包含文件,在結束的“?>”標記后沒有多余的空格或換行符。 否則,該空格或換行符將在標題之前發送到瀏覽器。

您確定腳本(或db.php)中的任何地方都沒有產生輸出嗎? 甚至沒有幾個多余的空間?

嘗試使用完整的URL,例如:

header("Location: http://www.mysite.com/index.php");

某些瀏覽器(感謝IE)無法理解URI未完成的301重定向代碼。

PHP中的標頭定位行為是一個很好的工具,但是很容易在不正確的情況下實現...為此,我將考慮使用require()代替header(location)

喜歡:

if (!imLoggedIn()){
  require('loginForm.php');
  exit;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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