繁体   English   中英

php登录会话登录变量

[英]php login session login variables

我正在学习php并注册了一门课程。 我的用户登录信息显示如下。

我的问题是,登录时我必须在会话中选择我想要的所有字段吗? 我可以不只是使用选择电子邮件并拉出所有行或我必须选择登录时的所有行?

示例如果没有提取有关id = id的用户的所有信息,请将此uid = uid用于该会话?

        $_SESSION['email'] = $email;
        $_SESSION['uid'] = $row['uid'];



function login_user($email, $password)
{
    $sql = "SELECT pwd, uid, user, birthdate FROM users WHERE email = '" . escape($email) . "' AND active = 1";

    $result = query($sql);

    if (row_count($result) == 1) {

        $row = fetch_array($result);

        $db_password = $row['pwd'];

        if (password_verify($password, $db_password)) {

            $_SESSION['email'] = $email;
            $_SESSION['uid'] = $row['uid'];
            $_SESSION['username'] = $row['username'];
            $_SESSION['birthdate'] = $row['birthdate'];

            return true;
        } else {

            return false;
        }

        return true;
    } else {

        return false;
    }
}

决定在会话数据中放入什么,以及现在有效地归结为权衡 - 性能与存储空间。 显然,这些论点基本上与小项目无关,只会对大量用户,流量等产生影响。

首先,如果您的登录是基于会话的,通常情况下,PHP将在需要时加载所需的会话数据,即在请求中提供会话cookie时。 会话数据必须至少包含登录用户的用户名/ id。

方法1 - 在会话数据中存储很多

为什么不在会话数据中加入更多内容? 每当用户登录时,将数据从数据库加载到会话中。

优点

  • 只要数据没有更改,就无需在登录后执行任何数据库操作。
  • 减少数据库服务器上的负载。

缺点

  • 相反,数据在服务器端会话存储中由PHP相对低效地存储。
  • 如果您的数据库服务器与PHP服务器不同,这意味着您现在将数据存储在错误的服务器上。
  • 如果数据发生更改,则会话必须无效。 如果更改会话中存储的数据的唯一方法是使用用户交互,则这有点容易发现。 如果可以在外部更改数据(即其他用户可以通过某种交互更改数据),这是一个问题 - 会话数据有时需要无效,因此您无论如何都必须检查数据库。

方法2 - 将所有内容保存在数据库中

在这种情况下,您只在会话数据中保留id或username。 然后根据需要从数据库加载任何其他数据。

优点

  • ID /用户名通常为用户设置。 完全注册后,其中至少有一个无法更改。 因此,仅在会话数据中保留这些是非常安全的。
  • 浪费较少的空间来存储会话数据。
  • 无需担心失效/更新陈旧数据,用户可以立即看到数据库中的任何更改(例如,在下一页请求中)。
  • PHP服务器不再负责跟踪数据,更容易将其与数据库服务器分离,更容易让多个PHP服务器与数据库服务器通信。

缺点

  • 必须经常查询数据库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM