Php 将所有用户变量加载到会话或仅加载到用户';什么是液体?

Php 将所有用户变量加载到会话或仅加载到用户';什么是液体?,php,session,authentication,session-variables,Php,Session,Authentication,Session Variables,在使用会话处理PHP中的用户身份验证时,我看到了两个在成功登录后访问用户属性的主要选项: 将用户的主要属性加载到会话超全局 仅将用户的UID(用户名或id等)加载到会话中,例如$\u会话['username'],然后在页面加载中获取用户的主要属性,并将其存储在用户对象中 方法1 通过超全局会话更容易访问作用域 方法2 当用户的数据被修改时,您不必担心更新会话变量,因为您在每个页面上都获取它 我的问题 我是否忽略了其他选择 通常的“完成”方式是什么 性能如何?在什么情况下,哪种方法更快

在使用会话处理PHP中的用户身份验证时,我看到了两个在成功登录后访问用户属性的主要选项:

  • 将用户的主要属性加载到会话超全局
  • 仅将用户的UID(用户名或id等)加载到会话中,例如
    $\u会话['username']
    ,然后在页面加载中获取用户的主要属性,并将其存储在用户对象中
  • 方法1

    • 通过超全局会话更容易访问作用域
    方法2

    • 当用户的数据被修改时,您不必担心更新会话变量,因为您在每个页面上都获取它
    我的问题

    • 我是否忽略了其他选择
    • 通常的“完成”方式是什么
    • 性能如何?在什么情况下,哪种方法更快
    注释

    • 当我说用户的“主要”属性时,我指的是那些将在许多页面上使用的属性,例如用户名、访问级别、电子邮件地址等。显然,您不会加载太多数据

    • 我指的是数据库存储的会话,而不是基于文件的会话


    这取决于项目,如果用户的某些信息最容易访问,则将其放入会话中。 我希望:

    class User{
       private $userName;
       //ohter attrs
       //getters and setters    
    }
    
    function login(){
        $user = new User();
        //populate attrs 
        $_Session["user"] = $user
     }
    

    不要将大批量数据放入会话,也不要放入UID,放入一些
    User
    classes对象

    这取决于项目,如果用户的某些信息最容易访问,则将其放入会话中。 我希望:

    class User{
       private $userName;
       //ohter attrs
       //getters and setters    
    }
    
    function login(){
        $user = new User();
        //populate attrs 
        $_Session["user"] = $user
     }
    

    不要将大批量数据放入会话,也不要放入UID,放入一些
    User
    classes对象

    通常只存储UID或任何其他唯一标识符(例如用户名),因为所有其他数据都可以动态更改。 然而,这取决于数据和项目本身。如果经常使用这些数据,并且您真的关心更新这些数据,那么在UID之外加载访问级别、用户名和电子邮件(如您所说)可能会非常高效! 另一方面,仅存储UID效率低下,因为您必须请求每个页面上的所有数据,但这是一种更安全的方法。无论如何,如果您需要在大多数页面上加载更多的用户数据,这种方法会更好,因为您无论如何都必须请求数据。 然而,为了提高数据库请求的效率,您可以使用数据库缓存。如果这样做,两种方法的效率可能几乎相等。 简言之,这实际上取决于项目类型、所需数据和环境,哪种方法更好、更有效


    还请注意,如果您存储的不是UID的用户数据,您也需要保存会话ID,因为用户可以打开多个会话,并且如果用户更改了用户数据,您需要确保他更改了相同的会话

    通常只存储UID或任何其他唯一标识符(例如用户名),因为所有其他数据都可以动态更改。 然而,这取决于数据和项目本身。如果经常使用这些数据,并且您真的关心更新这些数据,那么在UID之外加载访问级别、用户名和电子邮件(如您所说)可能会非常高效! 另一方面,仅存储UID效率低下,因为您必须请求每个页面上的所有数据,但这是一种更安全的方法。无论如何,如果您需要在大多数页面上加载更多的用户数据,这种方法会更好,因为您无论如何都必须请求数据。 然而,为了提高数据库请求的效率,您可以使用数据库缓存。如果这样做,两种方法的效率可能几乎相等。 简言之,这实际上取决于项目类型、所需数据和环境,哪种方法更好、更有效


    还请注意,如果您存储的不是UID的用户数据,您也需要保存会话ID,因为用户可以打开多个会话,并且如果用户更改了用户数据,您需要确保他更改了相同的会话 < P>如果您关心性能,那么您可能需要考虑实现一个缓存层(例如MyCache),并将您提取的用户数据存储在缓存中。我通常的做法是只使用memcached作为会话处理程序,而不是数据库。

    或者,什么对项目有效。方法2:如果用户打开了两个会话并更改了其配置文件,该怎么办?使用方法2,您将遇到一个问题,即当您更新数据库时,用户对象仍然具有旧值。然后,您需要担心向用户发出新请求。你确定你不是在处理一个母鸡和鸡蛋的问题吗?你说过你使用数据库来存储会话。所以你必须访问数据库才能得到UID@hakre:简单的修复方法:在“更新用户配置文件”代码的末尾添加一个“重新加载会话数据”。或者,什么对项目有效。方法2:如果用户打开了两个会话并更改了其配置文件怎么办?使用方法2,您将遇到一个问题,即当您更新数据库时,用户对象仍然具有旧值。然后,您需要担心向用户发出新请求。你确定你不是在处理一个母鸡和鸡蛋的问题吗?你说过你使用数据库来存储会话。所以你必须访问数据库才能得到UID@hakre:简单的修复方法:在“更新用户配置文件”代码的末尾添加一个“重新加载会话数据”。我不会说我非常关心性能,只是感兴趣而已。如果您存储了所有用户