我正在学习PHP,所以我正在创建一个登录站点。当用户输入有效凭据时,页面应定向到/site.php,但是当输入有效凭据时,页面将重定向回index.php。我正在使用在apache2上运行的端口8080上的域www.example.xyz进行此操作。
我已经通过测试新文件中的以下内容来测试会话是否正常运行: https://www.w3schools.com/php7/php7_sessions.asp
我只是不确定我的代码在做什么错
我知道与数据库的连接很好,因为我已经测试了代码,没有进行任何会话处理,并且可以按预期工作。
index.php
<?php
session_start();
require_once 'classes/membership.php';
$membership = new Membership();
if(isset($_GET["status"]) && $_GET["status"] == "loggedout")
{
$membership->logOut();
}
if($_POST && !empty($_POST["username"]) && !empty($_POST["pwd"]))
{
$response = $membership->validateUser($_POST["username"], $_POST["pwd"]);
}
?>
<!DOCTYPE html>
<head>
<title>Login Page</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src = "http://code.jquery.com/jquery-3.3.1.min.js"></script>
<body>
<div>
<form method="post" action="">
<h2>Login <small>enter your credentials</small></h2>
<p>
<label for="name">Username: </label>
<input type="text" name="username" />
</p>
<p>
<label for="pwd">Password: </label>
<input type="password" name="pwd" />
</p>
<p>
<input type="submit" id="submit" value="Login" name="submit" />
</p>
</form>
<?php if(isset($response)) echo "<h4>" . $response . "</h4>"; ?>
</div>
</body>
</head>
site.php
<?php
require_once 'classes/membership.php';
$membership = new Membership();
$membership->confirmMember();
echo phpinfo();
?>
<html>
<body>
<p>
<a href = "index.php?status=loggedout">Log Out</a>
</p>
</body>
</html>
membership.php
<?php
require_once 'mysql.php';
class Membership
{
function validateUser($un,$pw)
{
$mysql = new Mysql;
$validateCreds = $mysql->verifyUserAndPass($un,md5($pw));
if($validateCreds)
{
$_SESSION["status"] == "authorized";
header("location: /site.php");
}
else
{
return "Enter valid creds.";
}
}
function logOut()
{
if(isset($_SESSION["status"]))
{
unset($_SESSION["status"]);
}
if(isset($_COOKIE[session_name()]))
{
setcookie(session_name(),'',time() - 10000);
}
session_destroy();
}
function confirmMember()
{
if($_SESSION["status"] != "authorized")
{
header("location: /index.php");
}
}
}
?>
,如果输入有效的凭据,Mysql将返回true。
预期结果是当输入有效凭据时,应加载/site.php页面。用户单击site.php上的“注销”后,不应允许他们访问www.example.xyz:8080/site.php并将其定向回index.php
实际结果: 用户输入有效凭据,然后重定向到index.php。在firefox的网络Web工具中,我看到到达/site.php的页面,但收到HTTP 302,然后再次加载index.php,所以我在会话中做错了。
答案 0 :(得分:0)
您缺少会话开始时间。我将其添加到成员资格类的构造函数中。可能还有其他事情,但我认为那是最明显的事情。
在设置会话参数时,您也使用==。只能使用=。