PHP会话。无法登录

时间:2017-10-26 07:08:27

标签: php html session login

- 编辑 -

发现了这个问题。感谢Conyc。 我想我发现了这个问题。当没有剩余的行要读取时,mysqli_fetch_assoc($ result)返回null。这意味着当您尝试将用户名放入$ _SESSION [' Id'] = $ row ['用户名']时的会话时,$ row将为null;尝试将用户名存储在变量中,就像使用密码一样。 - Conyc 12分钟前

目前正尝试通过登录来显示内容。我正在使用会话和散列密码。我不能为我的生活弄清楚为什么它没有显示我登录"#34;登录"。 if(isset($ _ SESSION [' Id']))显示我没有登录,即使我可以从mysql中检索我的用户名和密码。我认为它可能与html上的会话有关?或者会话ID可能错了? IDK。如果你们有任何想法,我很想知道。我对PHP有点新意,所以它非常粗糙。

这是我的login.php

<?php
session_start();
$servername = "localhost";
$username = "root";
$password = "";

$user = $_POST['User'];
$Userpassword = $_POST['Password'];
$password_hash = password_hash($Userpassword, PASSWORD_DEFAULT);

$storedPassword = "";

// Create connection

$conn= mysqli_connect("$servername","$username","$password") or die ("could 
not connect to mysql");
mysqli_select_db($conn, "dpw_recyclopedia") or die ("no database");
$sql = "SELECT Username, Password FROM Users WHERE Username = '".$user."'";
$result = mysqli_query($conn, $sql);


if(! $result ) {
    die('Could not select data: ' . mysqli_error($conn));
}

if (mysqli_num_rows($result) > 0) {
    // output data of each row
    while($row = mysqli_fetch_assoc($result)) {
        //echo "user: " . $row["UserName"]. " " . $row["Password"]. "<br>";
        $storedPassword = $row["Password"];
    }
} else {
    echo "User Not Found";
}

 if (password_verify($Userpassword , $storedPassword)) {
    $_SESSION['Id'] = $row['Username'];
    header ("Location: 'mywebsite');
 }else {
    header ("Location: 'mywebsite');
    exit();

 }

?>

这是我的html页面

<?php
include 'DbConfig.php';
session_name('Id');
session_start();
session_regenerate_id();
?>

<!DOCTYPE html>
<html lang="en">

                    <?php

                        if (isset($_SESSION['Id'])){
                                echo "you are logged in";
                            } else {
                                echo "you are not logged in";
                    }

                    echo json_encode($_SESSION);
                    echo json_encode($_COOKIE);
                    ?>
                        <form method = 'POST' action="./ajax/login.php">
                        <input type='text' name='User' placeholder='Email'>
                        <input type='password' name= 'Password' 
placeholder='Password'>
                        <button type='submit'  name='my_form_submit_button'>
                        <span class='glyphicon glyphicon-log-in'></span> 
&nbsp; Sign In
                        </button>
                        </form>

                        <form method = 'POST' action="./ajax/logout.php">
                        <button type='submit'  name='my_form_submit_button'>
                        <span class='glyphicon glyphicon-log-in'></span> 
&nbsp; Sign Out
                        </button>
                        </form>


</html> 

2 个答案:

答案 0 :(得分:0)

尝试此代码(更改if(password_verify)部分):

if (password_verify($Userpassword , $storedPassword)) {
    $sql = "SELECT Username, Password FROM Users WHERE Username = '".$user."'";
    if($result = mysqli_query($conn, $sql)) {
        if (mysqli_num_rows($result) > 0) {
            while($row = mysqli_fetch_assoc($result)) {
                $_SESSION['Id'] = $row['Username'];
                header ("Location: 'mywebsite');
                die();
            }
        }
    }
}

答案 1 :(得分:0)

您实际上在两个页面上使用了不同的会话。

在您的html页面中,您使用

将会话名称设置为“Id”
session_name('Id');

虽然您的login.php页面使用默认会话名称,因为没有其他声明。

通过声明相同的会话名称或使用默认值,确保所有需要共享同一会话的页面上的会话名称相同。

您还可以使用

将自己置于html页面每个页面加载的新会话中
session_regenerate_id();

您也必须删除它。

此外,在将数据库添加到会话之前,必须将数据库中的用户名存储在临时变量中,因为当您尝试将其添加到会话时$row将为null({当没有更多要获取的行时,{1}}返回mysqli_fetch_assoc()

相关问题