首页 文章

基于会话的登录在远程服务器上不起作用

提问于
浏览
0

我正在为一个网站构建基于php的登录,该网站恰好在我用Wamp创建的localhost中工作,但如果我将文件复制到远程服务器并在那里设置相同的数据库,它就无法工作 . 与数据库的连接应该没问题,因为我可以在站点上注册一个新用户,该站点还会显示从数据库中取出的所有内容 .

该网站的登录部分的问题在于它根本不做任何事情 . 我尝试登录,如果它具有正确的帐户详细信息,则表示登录成功,并且它还回应会话变量以用于测试目的(例如:它显示保存在数据库中的给定用户的ID) . 但是当我导航到另一个页面时,用户根本就没有登录 . 我将尝试列出这里应该重要的所有代码,看看问题是什么:

登录表格:

<form action="submit.php" method="POST" id="loginForm">
    <fieldset>
        <table id="form_Table">
            <tr>
                <td><label for="login_Username">Username</label></td>
                <td><input type="text" name="login_Username" id="login_Username" class="" /></td>
            </tr>
            <tr>
                <td><label for="login_Password">Password</label></td>
                <td><input type="password" name="login_Password" id="login_Password" class="" /></td>
            </tr>
        </table>
    <p class="submit"><input type="submit" name="login_Submit" value="Log in" /></p>
    </fieldset>
</form>

处理submit.php中登录过程的php代码:

if (isset($_POST['login_Submit'])) { 
    if (!empty($_POST['login_Username']) && !empty($_POST['login_Password'])) {

        $username = mysql_real_escape_string($_POST['login_Username']);
        $password = md5(mysql_real_escape_string($_POST['login_Password']));

        $sql = "SELECT * FROM `users` WHERE `username` = '$username' AND `password` = '$password'";
        $checklogin = mysql_query($sql);


        $result = mysql_query($sql);
        if($result === FALSE) {
            die(mysql_error());
        }

        if(mysql_num_rows($checklogin) == "1") {
            $row = mysql_fetch_array($checklogin);
            $group = $row['group'];
            $userid = $row['id'];
            $cart = array();
            $_SESSION['Username'] = $username;
            $_SESSION['Group'] = $group;
            $_SESSION['UserID'] = $userid;
            $_SESSION['LoggedIn'] = 1;
            $_SESSION['cart'] = $cart; 
            echo '<h1>Logged in successfully!</h1>';
            //echo '<meta http-equiv="refresh" content="1;index.php">';
            echo $_SESSION['Username'];
            echo $_SESSION['LoggedIn'];
            echo $_SESSION['UserID'];
            echo $_SESSION['Group'];
            } else {
            echo '<h1>Wrong username or password!</h1>';
                }
            }
        }

index.php文件:

<?php
@session_start();
include 'header.php';
?>

connection.php:

<?php
@session_start();

//connect variables are here

mysql_connect($dbhost, $dbuser, $dbpass) or die("MySQL connection error: " . mysql_error());  
mysql_select_db($dbname) or die("MySQL database error: " . mysql_error());
mysql_query('SET NAMES utf8');

?>

header.php文件:

<?php include 'connection.php'; 
@session_start();?>

我最好的猜测是,由于某种原因,我离开给定页面后网站没有保留会话变量,这就是我将@session_start()添加到多个页面的原因,但它也不能以这种方式工作 .

由于我已经完成了我现在可以做什么的想法,所以我们将非常感谢任何帮助 . 谢谢 .

1 回答

  • 2

    当您收到“已发送标头”错误时,它应指定负责过早输出的文件和行 .

    我怀疑在你的一个文件中的PHP结束标记之后你可能有一个尾随空格 . 因为这是一个问题,所以完全省略关闭的PHP标记是个好主意 . PHP解析器不关心,所以你为什么要这样做? :)

    一个简单的修复可能只是简单地使用输出缓冲,但在这种情况下它不是必需的 .

    您是否检查过是否正在设置cookie?你在哪里打电话 session_destroy()session_start() 应该只被调用一次 . 将它推入引导程序文件可能是有意义的,并将其包含在每个页面中 .

相关问题