【问题标题】:Get all the values using $_SESSION使用 $_SESSION 获取所有值
【发布时间】: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() 与准备好的语句一起使用。不要练习不安全的代码,因为它会产生坏习惯。

标签: php mysql session


【解决方案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'];

脚注:

正如我在 cmets 中所说的:

MD5 已经 30 多年了,现在不安全。将 password_hash() / password_verify() 与准备好的语句一起使用。不要练习不安全的代码,因为它会产生坏习惯。

所以请帮自己一个忙,从正确的角度开始。

参考资料:

【讨论】:

  • $row['email'] = $_SESSION['email']; 倒退,还是只有我?
  • 在这里使用循环是一个不好的例子,因为您根本对 多个结果 不感兴趣。虽然从数据库中获取数据时使用循环是一个常见的新手错误,即使它是不必要的(双关语),但我们不要延续这种刻板印象。
  • @FunkFortyNiner 我的 POST 阵列上只有电子邮件和密码。不包括姓名。那么如何在我的 SESSION 上使用它呢?
  • @Benj 我看到你正在使用if (isset($_POST['login_user'])),所以我在这方面编辑了我的答案,认为这就是你想要用作他们的名字的东西。如果没有,那么您可能别无选择 but 使用循环(deceze 指出这是一个坏主意)并使用 name 列(如果有的话)并分配一个会话在 while 循环中将数组添加到该行的值。我不知道您的表结构是什么样的,或者您是否真的在登录时询问他们的姓名,但我对此表示怀疑。我没有什么可以补充的。
  • @Benj 大概是您在登录时从数据库中获取信息,不是吗?在您使用数据库时从数据库中获取名称并将其存储在$_SESSION 中。时期。不多也不少。
猜你喜欢
  • 2011-05-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-30
  • 2016-02-03
  • 1970-01-01
  • 2019-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多