在会话中存储用户数据 - 从数据库
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】:答案是视情况而定,在你的情况下,这甚至可能无关紧要。
会话方法
更少的查询 = 更快数据库方法
会话中的数据越少,防止崩溃 对数据库的更新会立即反映,而不必担心同时更新会话【讨论】:
以上是关于在会话中存储用户数据 - 从数据库的主要内容,如果未能解决你的问题,请参考以下文章