繁体   English   中英

PHP登录 - 从DB获取用户数据或在Session中存储?

[英]PHP Login - Get userdata from DB or store in Session?

对于我的登录系统,我需要检索一些用户数据,范围从用户名到会话和“禁止状态”,检查用户是否被暂停。

我已经看到一些系统在每次加载时从users检索这些数据。 我的问题是:这对我的服务器来说是不必要的压力吗?

或者我应该只将这些数据存储在$ _SESSION中? 然而,它不会更新,我不知道如何检查禁令状态。

谢谢!

用于检索每个请求的用户信息的单个数据库查询应该没问题 - 它非常快,并且对服务器没什么影响。 您可以随后添加缓存(例如APC或memcached),您可以告诉缓存每10分钟过期一次,或者通常需要检查用户是否被禁止。 但除非你的网站获得大量流量并且你实际上注意到性能问题(换句话说,避免过早优化 ),否则我不会理会这一点。

编辑:如果用户的禁止状态的更改总是通过您的应用程序发生,而不是直接在数据库中发生,那么您可以设置一些代码,以便在用户被禁止清除缓存时运行。 这样,在禁令生效之前,不会有10分钟的延迟(或任何缓存到期时间)。 但正如我上面所说,你可能不需要首先考虑缓存。

这取决于

用户名示例由于用户可能多久更改一次用户名,因此无需始终查询数据库以获取用户的用户名? 因此,最好在用户登录时将其存储在会话变量中

如果事实上,当用户确实更改了他/她的用户名时,您可能希望更新,因此在这种情况下,当用户更改其用户名时,您可以更新用户的会话变量:

function changeUsername($username){
    $userId = $_SESSION['user']['id'];

    //Code to change username

    updateUserSession($userId);
}

function updateUserSession($userId){
    //Query new username and other information
    $_SESSION['user'] = $dataFromQuery
}

如果您具有允许禁止用户的功能,请禁用状态示例 您仍然可以使用会话变量。 这次代码中唯一的区别是,当您禁用用户时,您必须清除并重新填充会话变量以使用新信息更新它。 但是,这样做可能有点棘手,因为禁止的人与被禁止的人不同,因此访问用户的会话变量是棘手的,需要解决

因此,更好的方法是,您必须反复检查每个页面请求的禁令状态。 但是,每个页面请求执行查询并不是一件坏事。 事实上,很多网站都会进行数百次查询。 但请注意,获取所有信息的一个大问题比一百个小查询要好得到相同数量的信息。

所以这一切都取决于你,使用会话变量的用户名和禁止状态示例显然是一个过度杀戮但我说它反正说明如果他们想要如何做到这一点。 没有什么不对,实际上,建议用于流量高的站点,因为在会话变量中存储值是一种缓存形式。 还有其他缓存数据的方法,但这是其中之一

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM