PHP会话系统脚本重新加载页面没有消息[重复]
Posted
技术标签:
【中文标题】PHP会话系统脚本重新加载页面没有消息[重复]【英文标题】:PHP session system script reloads page without message [duplicate] 【发布时间】: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()
必须在页面上的任何输出之前。显然不是。
【参考方案1】:
编辑 b/c 我没有看到 session_start()
来电:
问题可能在于 $stmt 的参数绑定或fetch_object()
。您可能想改用fetch_assoc_array()
,然后引用$user['password']
。您可以尝试一下,或者以其他方式回显get_result()
对象并让我们知道它是什么吗?
【讨论】:
以上是关于PHP会话系统脚本重新加载页面没有消息[重复]的主要内容,如果未能解决你的问题,请参考以下文章
PHP会话的数据在页面重新加载之间不一致 - 但会话ID是相同的