【发布时间】: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()必须在页面上的任何输出之前。显然不是。