簡體   English   中英

從本地主機移至實時服務器時,PHP登錄中斷

[英]Php login breaks when moved to live server from localhost

因此,我創建了一個在localhost服務器上工作的登錄頁面。 我想將其移至實時站點,但遇到問題,代碼不再起作用。 我僅包括php部分,因為用於登錄信息的HTML表單可能不是問題所在。

<?php 
session_start();
$_SESSION['errmsg'] = '';
if (isset($_POST['Username']) AND isset($_POST['Password'])) {
$username = $_POST['Username'];
$passwd = $_POST['Password'];

$stmt = $db->prepare("SELECT username, password, admin FROM Users WHERE username = :username AND password = :password;");
$stmt->bindValue(':username', "$username");
$stmt->bindValue(':password', "$passwd");
$stmt->execute();
$done = $stmt->fetch();



$affected_rows = $stmt->rowCount();

if ($affected_rows == 1) {
    if ($done['admin'])
        $_SESSION['admin_islogged'] = true;
    $_SESSION['user_islogged'] = true;
    $_SESSION['username'] = $_POST['Username'];
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    $_SESSION['id'] = $row['UserID'];
    }
    echo"<script>window.location = 'http://localhost/www/frontpage.php';</script>";
    exit;
} else {
    $_SESSION['errmsg'] = '<span style="background: red;text-color: white;">Error</span>';
}
}

echo "<span style='font-family:arial;color:white;font-size:18px'>{$_SESSION['errmsg']}    </span>";
unset($_SESSION['errmsg']);

?> 

frontpage.php當前位於var_dump($ _ SESSION)上,在本地主機上返回:

   array (size=4)
  'admin_islogged' => boolean false
  'errmsg' => string '' (length=0)
  'user_islogged' => boolean true
   'username' => string 'Test' (length=4)

但在實際的實時服務器上,var_dump僅返回:

array(1) { ["admin_islogged"]=> bool(false) }

我不知道為什么會這樣,請賜教。

編輯:好的,所以我到處都是var_dumping的東西,我發現在我的登錄頁面上,var_dump($ _ SESSION)顯示了正確的東西,但是當重定向到首頁時,信息會更改。 為什么會這樣呢?

您缺少session_start() ,該會話必須在任何輸出之前位於頁面頂部,或者如果您希望使用會話,則嘗試使用會話變量。

要使用基於cookie的會話,必須在將任何內容輸出到瀏覽器之前調用session_start()。

<?php 
session_start();
$_SESSION['errmsg'] = '';

只要設置了“ admin_islogged”,會話就必須正常工作,所以問題出在哪里

if ($done['admin'])
        $_SESSION['admin_islogged'] = true;

您是否嘗試過使用普通括號,但我真的不認為它應該解決此問題,但值得一試:

if ($done['admin']){
        $_SESSION['admin_islogged'] = true;
}

編輯:這樣做會更聰明:

$_SESSION['admin_islogged'] = $done["admin"];

暫無
暫無

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

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