我创建了一个系统,用户需要使用他们的名称,电子邮件和密码进行注册。
当他们单击提交时,所有这些数据都将发送到数据库。
下面的代码是如何保存他们的会话。
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'] 而不是用于标识用户的名称。有可能吗?
答案 0 :(得分:1)
(为您提供帮助)。
在您有用户登录的查询中,您可能正在执行某种类型的循环,例如:
while($row = mysqli_fetch_assoc($result)){
$_SESSION['email'] = $row['email'];
}
只需添加:
while($row = mysqli_fetch_assoc($result)){
$_SESSION['email'] = $row['email'];
$_SESSION['name'] = $row['name'];
}
然后您可以在其他页面中使用该会话数组。
确保每个会话数组均已设置且不为空,并且会话已启动。
编辑:
您还可以将会话数组分配给帖子数组。
即并假设您要在此处使用$_POST['login_user']
:
$_SESSION['name'] = $_POST['login_user'];
脚注:
正如我在评论中所述:
MD5已有30多年历史,现在不安全。使用password_hash()/ password_verify()以及准备好的语句。不要练习不安全的代码,因为它会养成不良习惯。
所以请帮个忙,然后从右脚开始。
参考文献: