【问题标题】:Session or Database lookup?会话或数据库查找?
【发布时间】:2014-08-11 12:10:56
【问题描述】:

我正在使用 laravel 运行一个 PHP 应用程序。我应该每次都使用 sql 查找用户信息,还是应该在查找一次后将其存储在会话/缓存中并从那里提取?除非用户更改信息,否则信息不会经常更改,因此我想从效率的角度来看待它。

【问题讨论】:

  • 假设您只是尝试查找当前登录用户的用户信息。会话会工作得很好。除非您还想四处走动并查询其他用户详细信息,否则会话不是一个好主意,我会坚持使用持久存储查找。

标签: php mysql laravel


【解决方案1】:

如果您正在谈论当前登录的用户信息,请将其留给Laravel。根据您的配置,Laravel 将保留数据,并让您使用统一的API 轻松访问数据。

Check Configuration

身份验证配置文件位于 app/config/auth.php,其中包含几个有据可查的选项 用于调整身份验证工具的行为。

默认情况下,Laravel 在你的 app/models 中包含一个 User 模型 可以与默认Eloquent 身份验证一起使用的目录 司机。如果你的应用没有使用 Eloquent,你可以使用 使用 Laravel 查询构建器的数据库身份验证驱动程序。

要检索用户/用户数据,您可以使用以下内容:

$user = Auth::user();
$userEmail = Auth::user()->email;

Laravel 将使用session 来存储用户id 并且原始数据将存储在数据库中,因此您无需担心用户数据。只需检查文档并让Laravel 去做。

【讨论】:

    【解决方案2】:

    我个人使用数据库的方式。有些人不知道这一点,但实际上会话是公开的。因此,该会话中的任何数据都可能因会话黑客而变红。

    现在这种情况并不经常发生(据我们所知),但确实发生了。对于数据库来说,通过 id 查找用户并不难。

    出于安全原因坚持使用数据库

    数据库增益大于cpu时间损失

    【讨论】:

    • 很遗憾您弄错了先生,我希望是这样。会话应该是红色的。它不会发生太多,但确实发生了。这也是您不在会话中发布密码的原因之一。因为会话很容易受到攻击。
    • 只要禁用session.use_trans_id 并启用session.cookie_httponly 和session.use_only_cookies,劫持一个人的会话并非易事。此外,现代框架使用加密的 cookie,因此即使是窃听您的流量的人也无法获得任何有用的信息
    • 你们都只是假设服务器是健全的,就像许多其他人一样。话虽如此,数据库提供了(如果做得好)更安全的数据获取方式。同意?因为归根结底,这是他的问题。对于这种安全性,CPU 时间的损失是可以接受的。同意吗?
    • @Matt 考虑到很多人将会话数据存储在数据库中,你甚至没有多大意义。您可以通过 SQL 注入公开您的数据库,这比将会话错误配置为可公开访问要容易得多。
    • 这就是我们加密和 PDO 的原因。 stackoverflow.com/questions/3224286/… Session 是数据存储,数据存储会吸引黑客。不要仅仅假设会话是安全的。您的用户数据是您在网站上的生动形象。尽你所能保护它。如果你不服气,不是我的问题。继续使用您的会话。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-28
    • 1970-01-01
    • 2012-12-19
    • 2015-11-26
    相关资源
    最近更新 更多