【发布时间】:2019-09-29 22:35:11
【问题描述】:
这是我做的第一个具有 DB 和 PHP 的应用程序,所以我预计它会出现一些错误,但我不知道我做错了什么。
我正在尝试将用户名从使用 JS/JQuery 的登录 HTML 表单传递到一个 PHP 文件中,该文件将验证用户名并将数据库中的内容存储到一些 $_SESSION 变量中。 换句话说,我只想验证登录页面的一些内容,所以我可以分配一个变量来保存整个会话,直到用户注销。
它在登录页面中正常工作,我可以将变量打印到控制台,但是当我使用 JS 重定向到第二页时,经过 PHP 用户验证,但变量在第二页中显示为空。
在我做的研究中,我发现两个页面都应该有:
<?php session_start(); ?>
但即使在更改之后,数组 $_SESSION 也是空的。
我还确认了会话的状态:
<?php session_status(); ?> //This result in a 2, meaning that it's working.
并且两个页面中的 ID 相同。
由于这是一个较大的项目,我想确定是否有其他问题困扰于此,因此我将其重新创建为一个较小的项目,但问题仍然存在。这是我在文件中的内容:
索引.php
我尽可能地剥离并验证问题是否仍然存在。 这是 PHP/HTML 表单以及覆盖按钮功能以执行我需要的 JQUERY 脚本。
这是文件的开头:
<?php session_start(); ?>
然后是身体:
<body class="bg-light">
<div class="flex-row d-flex justify-content-center">
<div class="col-xs-12 col-sm-8 col-md-6 col-lg-4" >
<form class="card" method="post">
<div class="card-body">
<div class="form-group">
<label for="username">User</label>
<input type="text" class="form-control" id="username" placeholder="" autocomplete="username">
</div>
<div class="form-group">
<label for="pssw">Password</label>
<input type="password" class="form-control" id="pssw" placeholder="" autocomplete="current-password">
</div>
<div class="d-flex justify-content-between">
<button class="text-center btn btn-primary" id="btn-login">Enter</button>
</div>
</div>
</form>
<div>
This is the ID of the session: <?php echo session_id(); ?>
</div>
</div>
</div>
jQuery 脚本
$(document).ready(function () {
$("#btn-login").click(function(){
event.preventDefault();
$.ajax({
url: "mylogin.php",
type: "POST",
data: {
name: $("#username").val(),
pssw: $("#pssw").val(),
},
success: function(data){
if (data == true){
$(location).attr('href', '/page2.php');
}
}
});
});
})
Mylogin.php
这里我从 JQuery 脚本中获取变量,验证用户和密码是否为“a”,然后分配 $_SESSION 变量。
<?php
$rawUser = $_POST['name'];
$rawPssw = $_POST['pssw'];
if($rawUser == "a" && $rawPssw == "a"){
$_SESSION["username"] = $rawUser;
$_SESSION["another"] = "New Test";
echo true;
} else {
echo false;
}
?>
Page2.php
这个的目的只是打印变量,但是它们是空的。
这又是文件的第一行:
<?php session_start(); ?>
然后是身体:
<body class="bg-light">
<section class="container" id="login">
<div class="flex-row d-flex justify-content-center">
<div class="col-xs-12 col-sm-8 col-md-6 col-lg-4" >
<h1>This is the second page</h1>
<div>
<?php echo "Session status: " . session_status(); ?>
</div>
<div>
<?php echo "Name: " . $_SESSION["username"]; ?>
</div>
<div>
<?php echo "Role: " . $_SESSION["pssw"]; ?>
</div>
</div>
</div>
</section>
</body>
我希望像 $_SESSION['name'] 这样的变量会在第二页加载时保存 PHP 文件分配给它们的任何值。这样,我将能够根据用户的登录设置某些元素的显示。
谢谢。
【问题讨论】:
-
你是在本地主机上开发这个吗?您是否配置了开发域?会话使用 cookie,如果您没有有效的域,则 cookie 经常会出现问题。
-
mylogin.php 有 也在顶部?
-
确保您可以看到任何可能发生的错误~How to get useful error messages in PHP?
-
@Robot70:将其添加到 mylogin.php 并开始工作。谢谢!
标签: php arrays session session-variables