当您单击login时,它应该显示注销按钮。单击注销按钮应使其再次显示登录选项。目前,它只是坐在登录窗口,即使它创建了一个会话,并填满了正确的信息在我的服务器。
我不知道为什么我的代码不工作。我让它工作,然后它突然停止了,我不知道我改变了什么。此外,我知道这不是使用数据库,我应该使用一个,但赋值调用不使用一个。
这里是index.php:
<?php
session_start();
if(empty($_SESSION['email']))
{
include("includes/login.php");
}
else
{
include("includes/logout.php");
}
?>
这是我的login.php:
<form id="login" method="post" action="index.php">
<input name="email" type="email" placeholder="Email@rit.edu" required="required">
<input name="password" type="password" placeholder="Password" required="required">
<input class="button" name="submit" type="submit" value="Submit">
</form>
<?php
//if someone tries to log in
if (isset($_POST['email']) && isset($_POST['password']))
{
$email=($_POST['email']);
$password=sha1($_POST['password']);
$users = file('includes/users.php', FILE_IGNORE_NEW_LINES);
for($i=0;$i<count($users);$i++)
{
$user = explode(',', $users[$i]);
if($user[0] === $email && $user[1] === $password)
{
session_start();
$_SESSION['email']=$user[0];
$_SESSION['pass']=$user[1];
$_SESSION['name']="$user[2] $user[3]";
$_SESSION['admon']=$user[4];
}
}
}
?>
这里是logout.php:
<form id="login" method="post" action="index.php">
<input name="logout" type="submit" value="logout" />
</form>
<?php
if($_POST['logout'] === 'logout')
{
session_destroy();
}
?>
在index.php中,检查用户是否已经登录:
if(empty($_SESSION['email']))
如果不包含,则包含登录页面,否则退出。但是如果你刚刚提交了表单,SESSION['email']仍然是空的,你正在显示你的表单。但是你有你的登录数据,所以如果你的详细信息是正确的,你就会登录-你会在刷新后看到它。
对于您的注销也是如此-如果您提交注销表单,您的会话将在最后一个请求中处于活动状态(这会破坏它),因此注销页面将再次被看到。您需要刷新您的浏览器,登录将出现。
要解决这两个问题,只需在两个if-s的末尾添加一个重定向。例如:
if($_POST['logout'] === 'logout')
{
session_destroy();
header('Location: index.php);
}
这将在处理注销后重新加载您的页面,有效地为您提供良好的结果。对登录做同样的操作,它也会工作。