Php 将所有用户变量加载到会话或仅加载到用户';什么是液体?
在使用会话处理PHP中的用户身份验证时,我看到了两个在成功登录后访问用户属性的主要选项:Php 将所有用户变量加载到会话或仅加载到用户';什么是液体?,php,session,authentication,session-variables,Php,Session,Authentication,Session Variables,在使用会话处理PHP中的用户身份验证时,我看到了两个在成功登录后访问用户属性的主要选项: 将用户的主要属性加载到会话超全局 仅将用户的UID(用户名或id等)加载到会话中,例如$\u会话['username'],然后在页面加载中获取用户的主要属性,并将其存储在用户对象中 方法1 通过超全局会话更容易访问作用域 方法2 当用户的数据被修改时,您不必担心更新会话变量,因为您在每个页面上都获取它 我的问题 我是否忽略了其他选择 通常的“完成”方式是什么 性能如何?在什么情况下,哪种方法更快
$\u会话['username']
,然后在页面加载中获取用户的主要属性,并将其存储在用户对象中- 通过超全局会话更容易访问作用域
- 当用户的数据被修改时,您不必担心更新会话变量,因为您在每个页面上都获取它
- 我是否忽略了其他选择
- 通常的“完成”方式是什么
- 性能如何?在什么情况下,哪种方法更快
- 当我说用户的“主要”属性时,我指的是那些将在许多页面上使用的属性,例如用户名、访问级别、电子邮件地址等。显然,您不会加载太多数据
- 我指的是数据库存储的会话,而不是基于文件的会话
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,因为用户可以打开多个会话,并且如果用户更改了用户数据,您需要确保他更改了相同的会话如果你关注性能,那么你可能需要考虑实现一个缓存层(例如MyCache),并将你的用户数据存储在缓存中。我通常的做法是只使用MeMcache作为会话处理程序而不是数据库。 < P>如果您关心性能,那么您可能需要考虑实现一个缓存层(例如MyCache),并将您提取的用户数据存储在缓存中。我通常的做法是只使用memcached作为会话处理程序,而不是数据库。或者,什么对项目有效。方法2:如果用户打开了两个会话并更改了其配置文件,该怎么办?使用方法2,您将遇到一个问题,即当您更新数据库时,用户对象仍然具有旧值。然后,您需要担心向用户发出新请求。你确定你不是在处理一个母鸡和鸡蛋的问题吗?你说过你使用数据库来存储会话。所以你必须访问数据库才能得到UID@hakre:简单的修复方法:在“更新用户配置文件”代码的末尾添加一个“重新加载会话数据”。或者,什么对项目有效。方法2:如果用户打开了两个会话并更改了其配置文件怎么办?使用方法2,您将遇到一个问题,即当您更新数据库时,用户对象仍然具有旧值。然后,您需要担心向用户发出新请求。你确定你不是在处理一个母鸡和鸡蛋的问题吗?你说过你使用数据库来存储会话。所以你必须访问数据库才能得到UID@hakre:简单的修复方法:在“更新用户配置文件”代码的末尾添加一个“重新加载会话数据”。我不会说我非常关心性能,只是感兴趣而已。如果您存储了所有用户