从localhost移动到live server时,Php登录中断

从localhost移动到live server时,Php登录中断,php,session,login,Php,Session,Login,所以,我创建了一个在localhost服务器上工作的登录页面。我想把它移动到一个实时站点,但我遇到了一个问题,代码不再工作了。我只包括php部分,因为用于登录信息的HTML表单很可能不是问题所在 <?php session_start(); $_SESSION['errmsg'] = ''; if (isset($_POST['Username']) AND isset($_POST['Password'])) { $username = $_POST['Username']; $pas

所以,我创建了一个在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']);

?> 
但在实际的实时服务器上,var_dump仅返回:

array(1) { ["admin_islogged"]=> bool(false) }
我不知道为什么会发生这样的事,请告诉我

编辑:好的,我一直在var_转储很多东西,我发现在我的登录页面上,var_转储($会话)显示了正确的东西,但是当重定向到首页时,信息会发生变化。为什么会发生这种情况?

如果您希望使用会话,则在任何输出或尝试使用会话变量之前,您必须在页面顶部找到它

要使用基于cookie的会话,必须在将任何内容输出到浏览器之前调用会话_start()

只要设置了“admin\u isloged”,会话就必须正常工作,所以问题就出在某个地方

if ($done['admin'])
        $_SESSION['admin_islogged'] = true;
您是否尝试使用普通括号,我不认为它应该修复它,但值得一试:

if ($done['admin']){
        $_SESSION['admin_islogged'] = true;
}
编辑:这样做更明智:

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

修正了这个问题,但是结果没有改变。是在每个页面上都使用会话吗?是的,每个页面上都有会话。那么,您的查询要么不起作用,要么无法从中获得预期的结果。您需要验证
$infected_rows
是否为
1
。好的,我使用var_dump及其1测试了受影响的_rows。您是否正确连接到数据库?是的,本地主机和live上的连接完全相同。
if ($done['admin']){
        $_SESSION['admin_islogged'] = true;
}
$_SESSION['admin_islogged'] = $done["admin"];