在PHP中使用会话处理用户身份验证时,我看到成功登录后访问用户属性的两个主要选项:
$_SESSION['username']
,然后在页面加载时获取用户的主要属性并将其存储在用户对象中方法1
方法2
我的问题
备注
当我说用户的“主要”属性时,我指的是那些将在许多页面上使用的属性,例如用户名,访问级别,电子邮件地址等。显然你不会加载太大的数据量。
我指的是数据库存储的会话,而不是基于文件的。
答案 0 :(得分:1)
这取决于项目,如果用户的一些信息最容易访问,那么就进入会话。 我会这样做:
class User{
private $userName;
//ohter attrs
//getters and setters
}
function login(){
$user = new User();
//populate attrs
$_Session["user"] = $user
}
不要将大批量数据放入会话中将其留在db中,也不要放置UID,放置一些User
类对象。
答案 1 :(得分:1)
通常,只存储UID或任何其他唯一标识符(例如用户名),因为所有其他数据都可以动态更改。 但是,它取决于数据和项目本身。加载例如除了UID之外,如果您经常使用这些数据并且您真的关心更新它们,那么您可以高效地访问级别,用户名和电子邮件。 另一方面,仅存储UID是低效的,因为您必须在每个页面上请求所有数据,但这是一种更安全的方法。无论如何,如果您需要在大多数页面上加载更多用户数据,这种方法会更好,因为您无论如何都必须请求数据。 然而,为了提高例如效率,数据库请求您可以使用数据库缓存。如果这样做,两种方式的效率可能几乎相等。 简而言之,它实际上取决于项目的类型,所需的数据和环境,哪种方法更好,更有效。
请注意,如果您存储除UID之外的用户数据,则还需要保存会话ID,因为用户可以打开多个会话,并且如果他更改用户数据,您需要确保他更改相同的会话!
答案 2 :(得分:1)
如果您担心性能,那么您可能需要考虑实施缓存层(例如memcache)并将拉出的用户数据存储在缓存中。我通常这样做的方法是使用memcached作为会话处理程序而不是数据库。