我正忙于登录系统,当我想测试它时,我注册了。奏效了。我的登录详细信息被插入数据库,就像一个魅力。然后,register()
函数将我的详细信息传递给login()
函数,后者将我登录,并将我重定向到索引页。
这部分都有效,但当我想通过检查是否设置了$_SESSION
变量来检查我是否真的登录时,但它并没有显示它是。
这是预成型登录的功能:
public function login()
{
$postusername = $_POST['username'];
$postpassword = $_POST['passwordp'];
$this->errors = array();
$query = $this->db->conn->prepare('SELECT naam, pass, email FROM ht_users WHERE naam = ?');
$query->bind_param('s', $postusername);
$query->execute();
$query->bind_result($username, $password, $email);
$query->store_result();
if ($query->num_rows > 0)
{
while ($query->fetch())
{
if (password_verify($postpassword, $password))
{
//$sessionid = $this->newSession($username);
session_start();
$_SESSION['user'] = array(
'username' => $username,
'email' => $email
);
header('Location: index.php');
exit();
}
else
{
$this->errors[] = 'Invalid Password';
}
}
}
else
{
$this->errors[] = 'Username/email not found NIGGUH';
}
return $this->errors;
exit();
$query->close();
}
正如你所看到的;登录成功后,它会启动一个会话,设置$_SESSION
变量,然后将我重定向到index.php
。为了准备一个简单的"我登录了吗"检查,我使用了菜单:
<?php
if (!isset($_SESSION['user']))
{
?><ul class="submenu-holder">
<li><a href="login.php">Inloggen</a></li>
<li><a href="register.php">Registreren</a></li>
<li><a href="#">Gebruikerslijst</a></li>
<li><a href="#">Alle badges</a></li>
<li><a href="#">Forum</a></li>
<li><a href="#">Wachtwoord vergeten</a></li>
</ul>
<?php
}
else
{
?><ul class="submenu-holder">
<li>INGELOGD</li>
</ul>
<?php
}
?>
但它总是显示正常的菜单,应该在用户没有登录时显示
我提出这个问题的目的:
- 我有没有犯任何可能导致这个问题的错误
- 代码是否正确,如果不正确,如何改进
谢谢,
卫斯理。
session_start()
需要位于BOTH文件的开头,然后才是任何其他代码。
您必须使用$_SESSION
变量在wehre中的每个文件中写入session_start();
!
我建议您使用$_SESSION
变量将session_start();
放在每个文件的第一行(您不必将其放在第一行,而是在使用之前!)。
如果你的菜单在index.php
中,那么它看起来像这样:
<?php
session_start();
if (!isset($_SESSION['user'])) {
?>
<ul class="submenu-holder">
<li><a href="login.php">Inloggen</a></li>
<li><a href="register.php">Registreren</a></li>
<li><a href="#">Gebruikerslijst</a></li>
<li><a href="#">Alle badges</a></li>
<li><a href="#">Forum</a></li>
<li><a href="#">Wachtwoord vergeten</a></li>
</ul>
<?php
} else {
?>
<ul class="submenu-holder">
<li>INGELOGD</li>
</ul>
<?php
}
?>