【问题标题】:PHP session system script reloads page without message [duplicate]PHP会话系统脚本重新加载页面没有消息[重复]
【发布时间】:2019-11-29 07:44:35
【问题描述】:

我对 PHP 完全陌生。我正在构建一个带有会话的 PHP 登录系统。这个想法是用户输入他们的用户名和密码。然后他们被重定向到一个被锁定的页面,该页面链接到其他锁定的页面。锁定页面有一个脚本来检查会话是否已启动。如果没有,用户将被重定向到登录页面。我面临的问题是系统基本上没有工作 - 没有错误,没有警报消息,我出于调试目的而放置,没有任何迹象表明脚本正在运行。唯一可以考虑的是登录表单刷新页面,但我仍然希望在代码执行后看到一个警告框。

这是我的登录脚本(index.php)(完全不是从随机教程网站复制粘贴的)(直播网址:http://daaseed.com/Player/):

<form action="" method="post">
    <input type="text" name="username" placeholder="Enter your username" required>
    <input type="password" name="password" placeholder="Enter your password" required>
    <input type="submit" value="Submit"> </form>
<?php
// Always start this first
session_start();

if ( ! empty( $_POST ) ) {
    if ( isset( $_POST['username'] ) && isset( $_POST['password'] ) ) {
        // Getting submitted user data from database
        $con = new mysqli("sfconsul.dot5hostingmysql.com ", "Nasko", "Nasko", "Nasko");
        $stmt = $con->prepare("SELECT * FROM Nasko WHERE username = ?");
        $stmt->bind_param('s', $_POST['username']);
        $stmt->execute();
        $result = $stmt->get_result();
        $user = $result->fetch_object();

        // Verify user password and set $_SESSION
        if ( password_verify( $_POST['password'], $user->password ) ) {


            $_SESSION['user_id'] = $user->ID;
        }


        if ($con->connect_error) {
   die("Connection failed: " . $con->connect_error);
}
alert("Hello World");
    }
}
?>

这是检查会话是否已设置的验证代码:

<?php
// You'd put this code at the top of any "protected" page you create

// Always start this first
session_start();

if ( isset( $_SESSION['user_id'] ) ) {
    // Grab user data from the database using the user_id
    // Let them access the "logged in only" pages
    alert("Done");
} else {
    // Redirect them to the login page
    header("Location: http://daaseed.com/Player/");
}

This is the screenshot from the login page after entering data and pressing the button

锁定页面显示内容而不检查会话(基于我的意见,因为不显示警告框)。

如您所见,代码存在一些问题,我无法找到解决方案。如何让上面的代码成功运行?

【问题讨论】:

  • 欢迎来到php!可以帮助您以 10 倍的速度解决这些类型的问题,并以 10 倍的速度学习:使用允许逐步调试的 IDE。这意味着您可以在代码运行时逐行浏览代码,并检查变量的值,查看代码的确切位置等。Phpstorm IDE 是一个流行的选项,而 XDebug 是一个流行的工具来执行此操作调试
  • session_start() 必须在页面上的任何输出之前。显然不是。

标签: php database


【解决方案1】:

编辑 b/c 我没有看到 session_start() 来电:

问题可能在于 $stmt 的参数绑定或fetch_object()。您可能想改用fetch_assoc_array(),然后引用$user['password']。您可以尝试一下,或者以其他方式回显get_result() 对象并让我们知道它是什么吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-02
    • 2016-06-12
    • 1970-01-01
    • 2014-11-09
    • 2019-08-03
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多