我試圖從PHP 5.6遷移到PHP 7.0。我一直在我的開發機器上進行一些測試,並且無法按預期工作。從PHP 5.6到PHP 7 - 會話/重定向在生產計算機上無法正常工作
應用程序的一部分需要用戶登錄。如果他們沒有登錄,並嘗試訪問網站的受限制部分,他們將被重定向到登錄頁面。會話用於存儲用戶是否登錄。這可以在我的開發機器(使用PHP 7.0)和生產機器上使用PHP 5.6。它可以在生產機器上使用PHP 7.0。
如果輸入不正確的用戶名和密碼,它會顯示相應的錯誤消息。但是,如果我輸入了正確的用戶名和密碼,登錄屏幕將再次顯示。沒有錯誤,並且沒有返回URL。我懷疑閱讀環節有問題,但我不能積極。但是,我不確定爲什麼會這樣 - php.ini文件中的session.save_path是相同的。
我真的很感激任何關於這個問題的指導。我只是不知道該如何解決這個問題,因爲它在我的開發機器上工作正常。
的登錄界面:
<?php
include_once("config.php");
include(INCLUDEROOT . "includes/header.php");
$return = "teammember/index.php";
?>
<div class='row adminHeader topSection'><div class='col-md-12'><h2>Login</h2></div></div>
<?php
if(isset($_GET['failed'])) {
echo "<span class='error'>Invalid login.</span>";
}
if(isset($_GET['returnURL']) && $_GET['returnURL'] != "") {
$return = formatInput($_GET['returnURL']);
}
?>
<form method='post' action='includes/login.php'>
<input type='hidden' name='returnURL' value='<?php echo $return; ?>' />
<div class='form-group'><label class='control-label'>Username: </label><input type="text" class='form-control' name="user"></div>
<div class='form-group'><label class='control-label'>Password: </label><input type="password" class='form-control' name="pass"></div>
<button class='btn btn-primary pull-right' name="login" value="Login">Login</button>
<div class='clearfix'></div>
</form>
<?php
include(INCLUDEROOT . "includes/footer.php");
?>
登錄後端/腳本
<?php
ini_set('display_errors',1);
error_reporting(E_ALL);
include_once("../config.php");
$dbContext = new DBContext();
session_start();
$error;
$username = formatInput($_POST["user"]);
$pass = formatInput($_POST["pass"]);
$returnURL = formatInput($_POST['returnURL']);
if ($dbContext->getUser($username, $pass) != false) {
$_SESSION["userLevel"] = $dbContext->getUser($username, $pass);
if ($dbContext->getUser($username, $pass) != 1) {
// header("Location: " . ROOT . "teammember/index.php");
header("Location: " . ROOT . $returnURL);
} else {
// header("Location: " . ROOT . "teammember/adminPanel.php");
header("Location: " . ROOT . $returnURL);
}
} else {
header("Location: " . ROOT . "login.php?failed=true&returnURL={$returnURL}");
}
代碼段(在header.php文件),如果他們還沒有登錄的用戶重定向:
<?php
if (! isset ($_SESSION)) {
session_start();
}
if (empty ($_SESSION ['userLevel'])) {
$returnURL = $_SERVER["REQUEST_URI"];
$returnURL = substr($returnURL, 1); /// remove leading slash
header ("Location: " . ROOT . "login.php?returnURL=$returnURL");
}
$isAdmin = ((isset ($_SESSION ['userLevel']) && $_SESSION ['userLevel'] == 1) ? true : false);
?>
顯示請求的圖片:
它不應該再從index.php重定向到login.php(index.php包含上面提到的header.php)。
謝謝!
你打算寫「有**沒有**能夠讓它按預期工作嗎?」? – Barmar
檢查錯誤日誌中是否有'headers already sent'錯誤。 – Barmar
在日誌中沒有錯誤,我很害怕。 – KellyMarchewa