当从本地主机移动到实时服务器时,PHP 登录中断



所以,我创建了一个在本地主机上工作的登录页面。我想将其移动到实时站点,但是遇到了一个问题,代码不再有效。我只包含 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"];

相关内容

最新更新