【发布时间】:2018-10-19 01:03:10
【问题描述】:
我创建了一个系统,用户需要使用他们的姓名、电子邮件和密码进行注册。
当他们点击提交时,所有这些数据都会发送到数据库中。
下面的代码是他们的会话是如何保存的。
if (isset($_POST['login_user'])) {
$email = mysqli_real_escape_string($db, $_POST['email']);
$password = mysqli_real_escape_string($db, $_POST['password']);
if (empty($email)) {
array_push($errors, "email is required");
echo "Email is required<br>";
}
if (empty($password)) {
array_push($errors, "Password is required");
echo "Password is required";
}
if (count($errors) == 0) {
$password = md5($password);
$query = "SELECT * FROM $tbl_name2 WHERE email='$email' AND password='$password'";
$results = mysqli_query($db, $query);
if (mysqli_num_rows($results) == 1) {
$_SESSION['email'] = $email;
$_SESSION['success'] = "You are now logged in";
header('location: store/generatetrans.php');
}
else {
array_push($errors, "Wrong username/password combination");
echo "Wrong username/password combination";
}
}
}
他们可以使用他们的电子邮件和密码登录。
<?php
session_start();
if (!isset($_SESSION['email'])) {
$_SESSION['msg'] = "You must log in first";
header('location: ../login.php');
}
if (isset($_GET['logout'])) {
session_destroy();
unset($_SESSION['email']);
header("location: ../login.php");
}
?>
我用这个代码让系统识别谁登录了。
当他们登录时,系统会使用此代码显示“Welcome user@email.com”。
<?php if (isset($_SESSION['email'])) : ?>
<p>Welcome <strong><?php echo $_SESSION['email']; ?></strong></p>
<p> <a href="index.php?logout='1'" style="color: red;">logout</a> </p>
<?php endif ?>
我的问题是我如何才能获得用户在注册时使用的 NAME 并将其显示在欢迎而不是电子邮件旁边。我仍然想使用 $_SESSION['email'] 而不是名称来识别用户。这可能吗?
【问题讨论】:
-
将名称也存储在
$_SESSION和/或从数据库中获取...!? -
所以我应该在查询中添加名称以了解他们的会话是如何保存的?
-
我还添加了有关如何保存会话的当前代码:)
-
你不会忍受这个,是吗?或计划?
-
MD5 已经 30 多年了,现在不安全。将
password_hash() / password_verify()与准备好的语句一起使用。不要练习不安全的代码,因为它会产生坏习惯。