2016-04-12 135 views
-1

我有要保留在会话中的用户信息。我正在使用memcache作为会话保存处理程序。我有两个方法,用于存储用户信息会话变量的性能影响PHP

$_SESSION['uname'] = 'abx'; 
$_SESSION['email'] = '[email protected]'; 
$_SESSION['profilepage'] = 'http://t'; 
$_SESSION['role'] = '1'; 
$_SESSION['profilepicture'] = 'http://t'; 
$_SESSION['gender'] = 'M'; 

OR

$obj = new stdClass(); 
$obj->uname = 'abx'; 
$obj->email = '[email protected]'; 
$obj->profilepage = 'http://t'; 
$obj->role = 1; 
$obj->profilepicture = 'http://t'; 
$obj->gender = 'M'; 
$_SESSION['user'] = $obj; 

我想知道哪一种方法更好。多个会话变量是否有任何性能影响。

+1

运行基准。 –

+0

我们在谈论多少数据?你在会话中多久阅读一次? – st2erw2od

+0

更多的用户信息数据将在那里。凡是我需要用户数据的地方都会使用会话。 – coder

回答

2

只有你在问题和评论中提到的这个小数据量对性能的影响很小,根本不存在。在内部,你可以通过基准测试来测量一些非常小的差异,但这不会加快速度。

在这种情况下,我会尝试考虑清洁,可重用和可维护的代码优于性能的好处。第二个面向对象的方法在我看来更有意义,被认为是最佳实践。

1

除了st2erw2od的回答(我完全同意他),我只想补充一点,对我来说这听起来不像一个会话的好用例。

会话不应包含用户的所有数据和/或包含userdata的完整对象。它应该只包含必要的数据,例如哪个用户被认证。然后根据特定的规则(例如,当他们需要或完整的用户实体等)从数据库(文件系统等)加载其他任何东西,例如他的电子邮件地址,个人资料图片等等。所以在这种情况下,我建议只保存会话中的用户ID,然后从数据库加载信息。

这样做的主要优点是:a)更清晰(更少代码); b)您的信息始终是最新的并与数据库同步,否则您可能会遇到一些严重的错误。

+0

我同意,感谢您添加此信息以帮助OP。 – st2erw2od

+0

@Andreas同意有限的信息应该存储在会话中,但最小的必需信息应该在会话或缓存层。否则,在每个页面上,您将额外击中DB – coder

+0

@ user524694:无论如何,您必须点击数据库才能加载更多信息。如今,你通常使用某种类型的模型,无论如何都需要加载。 – Andreas