将数据存储到会话中并在"主要"操作时存储到数据库

Yus*_*liq 11 php mysql database performance session

我知道有数百个问题,但我要问的是略有不同.

当用户登录时,我想从数据库中的每个表中获取所有数据并将其存储在会话变量中(显然不是敏感数据,如加密密码/盐等基本上是无用的数据或对于没有任何价值的数据)黑客!!),当用户使用网站时,将使用存储在会话中的相关数据,而不是每次访问数据库.此外,当数据被更改或添加时,这将被写入或添加到会话文件中,并且在诸如"保存"或"登出"之类的主要动作时,新的/改变的数据将被写入数据库.

我希望这样做的原因仅仅是为了提高效率,我希望我的应用程序不仅速度快,而且资源消耗更少.我不是任何一个专家,这可以解释为什么我的想法没有区别或资源密集.

如果我的解决方案有替代方案,请告诉我,或者如果我的解决方案有一些改进,我会很高兴听到它.

谢谢.我的应用程序是使用PHP和MySQL.

taz*_*r84 5

如果其中任何一项不适用于您的应用,请忽略。一般来说,我反对使用会话作为缓存(特别是如果会话中的任何内容都将被写回数据库)。这是为什么。

  • 编辑会话需要来自用户的请求。在请求-响应周期之外编辑 php 会话非常困难。因此,如果用户 Alice 进行了影响 Bob 的更改,则您无法弄脏 Bob 的缓存
  • 您不能假设用户会注销。他们可能会离开,因此如果会话超时,您必须处理保存信息。同样,这在请求-响应周期之外是很困难的,并且在用户回来之前,您不能完全保留会话文件(默认情况下 php 将对其进行 gc)
  • 如果用户需要身份验证,则您将在会话中存储私人信息。一些用户可能对此不满意。更重要的是,黑客可以利用该私人信息对最终用户进行社会工程攻击。
  • Mallory(黑客)可能无法使用您放入会话中的信息,但她可以对其进行中毒(即缓存中毒),从而在您将缓存写入永久存储时导致各种问题。会话比 redis 或 memcache 更容易中毒。

TL;DR 使用会话缓存时有很多注意事项。我的建议是 redis/memcache。