【问题标题】:Are multiple sessions relating to elements of a same table bad?与同一张表的元素相关的多个会话是否不好?
【发布时间】:2015-10-02 00:30:39
【问题描述】:

我正在查看我的注册和登录表单,困扰我的是我为每个表单的各个变量定义了几个会话。这就是我要说的:

我的注册表的一部分:

    $pass = md5($pass);
          $regSQLI = "INSERT INTO users (id, email, birth_date, first_name, last_name, password, sign_up_date, activated) VALUES ('','$em','$bday','$fn','$ln','$pass','$sud','0')";
          $regQuery = mysqli_query($con, $regSQLI);
          //variables that will be passed over from the register fields to forthcoming sessions
          $_SESSION["email_login"] = $em;
          $_SESSION["first_name"] = $fn;
          $_SESSION["last_name"] = $ln;

我的登录表单的一部分:

    if ($userCount == 1) { //if the search finds a matching record of the login input form
      while( $row = mysqli_fetch_assoc($sqli)) { // use fetch_assoc
          $id = $row["id"];
          }
      $_SESSION["email_login"] = $email_login;
      $_SESSION["first_name"] = $fn;
      $_SESSION["last_name"] = $ln;
      header("location: home.php");
      exit();
  }
  else {
    echo '<div id="regerrormsg">Login information is invalid. </div>';
  }
    }

一切正常,但我想知道是否可以通过清理必须调用多个会话来节省一些性能。我有多个会话的原因是因为即使用户将使用他们的电子邮件注册和登录,系统也会通过他们的名字来寻址/回显他们:

      <?php
    echo $_SESSION["first_name"]."&nbsp".$_SESSION["last_name"].".";
    ?>

有没有一种方法可以让我只使用一个会话变量(可能是电子邮件)作为验证器,并从数据库中检索与相关会话变量对应的数据?那会更干净更顺畅吗?谢谢。

【问题讨论】:

  • 没有区别。客户端仍然只得到一个 cookie。你这样做的方式很好。引导,用户可能有未同步的信息,因此在这种情况下,您可能只想在会话中保留 users.id 并从中提取用户数据。
  • 您没有调用“多个会话”。这是一个包含多个数据位的单个会话。这些都没有到达客户
  • @DaveChen 非常感谢。不过,出于好奇,是什么导致用户拥有不同步的信息?
  • @MarcB 感谢您让我放心!
  • 假设用户更改了他们的用户名(或管理员这样做),那么该会话的用户将只能看到他们的旧用户名。

标签: php html session mysqli


【解决方案1】:

U 可以在 session 中保存 userid 的数据,并可以使用它从其他表中获取数据。

【讨论】:

    【解决方案2】:

    一切看起来都很正常,通过摆弄可能不会获得太多性能。

    最重要的是,您的代码实际上并没有显示用户被要求通过表单输入的内容,或者数据库实际被要求搜索的内容......这可能是优化的点位。

    ...而且,您似乎误解了超全局 $_SESSION 的真正含义。

    您所看到的“几个会话”实际上只是一个标准会话:一个包含您想要放入的任意数量的键/值对的数组。

    当您调用session_start(); 时,$_SESSION 会自动生成和/或从文件/内存/数据库(您的保存处理程序)加载,设置 cookie 或使用 $_GET 完成 url 重写。一切都取决于您的设置。

    在此处阅读更多信息:http://php.net/manual/en/intro.session.php

    【讨论】:

    • @OlfeSauffaus 非常感谢,将您的逻辑应用于我的理解更有意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-13
    • 2021-06-15
    • 2021-01-03
    • 1970-01-01
    • 2019-10-15
    相关资源
    最近更新 更多