【问题标题】:Storing user data in sessions - from DB在会话中存储用户数据 - 从数据库
【发布时间】:2012-10-26 17:34:24
【问题描述】:

如果我有一个登录系统或类似的东西,我会在会话中存储一个 session_id 和一个 user_id,但与某个用户有关的任何其他数据都存储在数据库中。我见过人们在会话中存储其他数据(用户名、电子邮件等)的其他脚本。

我只是想知道,哪个会“更好”?将数据保存在数据库中的会话中,还是使用较少的会话并从数据库中获取数据?

谢谢!

【问题讨论】:

  • 我想说只是在会话中存储用户 ID 和登录哈希等内容。请记住不要存储脚本未多次请求的密码或信息。我最后一句话的意思是,如果在整个会话中只需要一次,您可以从数据库中获取电子邮件。希望对您有所帮助。

标签: php mysql database session


【解决方案1】:

实践表明,最好将数据保存在数据库中(对于 >= 中型项目(服务器场/会话中确实有大量数据)或增强任何类型项目的安全性(例如共享主机))。甚至用户 ID 也不应该保存在 $_SESSION 中。散列、闪烁消息、快速设置 - 这就是 $_SESSION 中应该包含的内容。

但是如果您仍然有一个问题“我需要将会话保存在 DB 中吗”,那么您很可能不应该将它保存在 DB 中。

【讨论】:

  • 您可能也对 memcache 会话存储感兴趣
【解决方案2】:

您可以在$_SESSION 中存储您喜欢的任何信息。我相信它可以达到 128Mb - 限制由 memory_limit 管理,默认情况下为 128Mb。你可以改变这个。

但是,根据经验,我会存储相关信息和/或比查询数据库更便宜的信息 - 换句话说,尽可能少

毫无疑问,它会因用途而有很大差异,但会话通常包含以下内容:

  • 用户名
  • 完整的显示名称
  • 电子邮件地址
  • ID(用户或其他)
  • 权限
  • 用户组
  • 哈希
  • 表单输入错误(暂时突出显示表单错误)

出于速度/规模的原因,不建议存储大块数据/信息。

如果您的站点/平台需要在以后适当地扩展,您最好查看write-through caching 或类似的常用/必需数据(例如Memcached)并存储大量数据库中的大部分数据 - 应该在哪里。

希望这会有所帮助。

【讨论】:

    【解决方案3】:

    答案是视情况而定,在你的情况下,这甚至可能无关紧要。

    会话方法

    • 更少的查询 = 更快

    数据库方法

    • 会话中的数据越少,防止崩溃
    • 对数据库的更新会立即反映,而不必担心同时更新会话

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-23
      • 2011-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-11
      • 1970-01-01
      相关资源
      最近更新 更多