PHP 登录会话登录变量

3

我正在学习 PHP 并已经报名参加了一门课程。我的用户登录信息如下。

我的问题是,在登录时,我是否必须选择我想要在会话中使用的所有字段?我能否只选择电子邮件并通过它拉取所有行,还是必须在登录时选择所有行?

例如,以 uid = uid 的形式,不应该提取 id = id 的用户的所有信息吗?

        $_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;
    }
}

不必将所有用户数据都存储在会话存储中,只需将那些在其他页面中经常需要访问的数据存储在会话中即可。您可以仅将电子邮件存储在会话中,并根据此获取其他页面中的数据,但这取决于您的需求。重复查询相同数据需要更多时间,而将其存储在会话中则不然。 - Indrasinh Bihola
您只需选择电子邮件和密码进行验证,仅使用uid的cookie。任何其他字段都可以在需要时获取。 - RandomName
非常感谢Charlie和Indrasinh Bihola。 - Rome
1个回答

0

决定将什么放入会话数据以及现在实际上是一种权衡 - 性能与存储空间之间的权衡。显然,这些论点对于微小项目基本上是无关紧要的,只有在用户数量、流量等方面存在巨大差异时才会产生影响。

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

方法1-在会话数据中存储大量数据

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

优点

  • 只要数据不改变,就无需在登录后执行任何数据库操作。
  • 减轻数据库服务器的负载。

缺点

  • PHP在其服务器端会话存储中相对低效地存储数据。
  • 如果您的数据库服务器与PHP服务器不同,则意味着您现在正在错误的服务器上存储数据。
  • 如果数据发生更改,则必须使会话失效。如果仅通过用户交互来更改存储在会话中的数据,则有点容易发现。如果数据可以在外部更改(例如其他用户可以通过某些交互更改数据),则存在问题-有时需要使会话数据无效,因此您必须检查数据库。

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

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

专业:

  • 用户的ID /用户名通常是固定的。一旦完全注册,这些中至少有一个不能更改。因此,仅将这些保留在会话数据中非常安全。
  • 存储会话数据时浪费的空间较少。
  • 无需担心使过期的数据失效/更新,数据库中的任何更改都会立即对用户可见(例如,在下一页请求上)。
  • PHP服务器不再负责跟踪数据,易于将其与数据库服务器解耦,易于多个PHP服务器与数据库服务器通信。

缺点

  • 必须经常查询数据库。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接