在会话中存储用户数据 - 从数据库

Posted

技术标签:

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

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

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

谢谢!

【问题讨论】:

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

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

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

【讨论】:

您可能也对 memcache 会话存储感兴趣【参考方案2】:

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

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

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

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

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

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

希望这会有所帮助。

【讨论】:

【参考方案3】:

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

会话方法

更少的查询 = 更快

数据库方法

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

【讨论】:

以上是关于在会话中存储用户数据 - 从数据库的主要内容,如果未能解决你的问题,请参考以下文章

通过将数据存储在会话存储中进行会话管理

PHP存储会话数据,在会话中存储用户ID

从数据库中检索值并将其存储为会话变量

Grails:在用户会话期间存储数据的最佳方法[关闭]

在会话/历史reactjs中存储用户数据是不是安全

将用户会话变量存储在文件与数据库中