布局.phtml
<?php if (isset($_SESSION['user']) && ($_SESSION['user'] == false)): ?>
<p>Hello </p>
<a href="logout.php">Logout</a>
<?php else: ?>
<a href="register.php">Sign up</a>
<a href="userconnect.php">Connect</a>
<?php endif; ?>
我想展示 logout
当用户登录并 connect
按钮时,他们没有登录。但是发送表单数据时,它只显示 connect
按钮。
用户连接.phtml
有一个html表单。
<div class="user-connect">
<?php if (isset($message)) { echo $message; } ?>
<form action="userconnect.php" method="post">
<ul>
<li>
<label for="email"></label>
<input type="text" id='email' name='email'>
</li>
<li>
<label for="password"></label>
<input type="password" id='password' name='password'>
</li>
<li>
<input type="submit" name="enter">
</li>
</ul>
</form>
</div>
用户连接.php
<?php
session_start();
if(isset($_POST["enter"]) && !empty($_POST["enter"])) {
if(!empty($_POST['email']) && !empty($_POST['password']))
{
$email = htmlspecialchars($_POST['email']);
$password = htmlspecialchars(md5(md5($_POST['password'])));
include ("connection.php");
$query = $db->prepare('SELECT ID, email, password, firstName FROM user WHERE email = ?');
$query->execute([$_POST['email']]);
$user = $query->fetch();
if ($user) {
if($_POST['password'] == $user['password'] && $_POST['email'] == $user['email'])
{
$_SESSION['user'] = [
'email' => $user['email'],
'id' => $user['ID']
];
}
$message = "Vous etes connectez!";
} else {
$message = "Invalide email ou mot de passe!";
}
} else {
$message = "Champs obligatoire a saisir";
}
}
$template = 'userconnect';
include 'layout.phtml';
倾倒 $_SESSION['user']
:
<?php var_dump(isset($_SESSION['user'])); ?>
显示器 bool(false)
.
你能帮我怎么展示这个吗 logout
按钮?
我到处找了,找不到解决办法。
2条答案
按热度按时间uqzxnwby1#
有个小问题。如果用户已登录,
$_SESSION['user']
不能是false
. 试着这样做:布局.phtml
6qfn3psc2#
第一件事
代替
具有
你不需要
$_POST['email'] == $user['email']
因为您已经在查询中用WHERE
子句,因此您只能得到与您在POST
请求。所以,指定$_POST['email'] == $user['email']
一旦查询返回匹配的结果(电子邮件),就没有用了。那么,你应该使用
$password
而不是$_POST['password']
因为密码字段已处理为$password
带有一些散列的变量。第二件事
不要使用
htmlspecialchars
或者htmlentities
根据用户输入。只有当你在页面上输出一些东西来防止类似的攻击时才重要XSS
.另外,我想知道你的密码是如何在注册过程中处理。
更新
正如您在评论中提到的,您使用
password_hash
函数在注册期间对密码进行哈希运算。但在这个问题上,你用
md5(md5($_POST['password']))
散列输入并与数据库中的散列密码匹配。这行不通。相反,你应该使用
password_verify
其目的是将输入与由生成的哈希密码相匹配password_hash
.这是你该如何使用它,
顺便说一下,你把这句话,
密码验证条件内。
就这样。
希望有帮助!