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

Ala*_*ats 11 php database session session-management

我有一个php应用程序,我正在使用$ _SESSION本身为用户保存会话变量.将它存储在数据库中有什么特别的优势吗?

我正在寻找一篇可靠/研究得很好的文章,该文章更多地讨论了这个问题.我还没能找到任何东西.

Eti*_*ais 6

将数据存储在数据库中的优势在于,只要您希望数据存在,数据就会存在.

您的浏览器将根据其设置方式销毁会话,这使得它有点不可靠.然而,我无法找到关于此的文章,但这是我用作这种情况的惯例.

任何需要长期存储的数据,例如我存储在数据库中的用户详细信息和活动.任何仅与当前工作空间相关的数据,如登录站点和发布一些注释等,都可以存储在会话中.例如,我在会话中存储用户身份验证详细信息,以不断检查用户是否已登录以及是否将他/她重定向到正确的页面.

在整个应用程序中检查访问权限时,这会产生奇迹.

对我来说,将用户详细信息存储在数据库中更加安全,因为它不能像$ _SESSION那样以公共方式访问.

如果你愿意,请不要同意我的意见.

  • $_SESSION 究竟是如何被公开访问的? (3认同)

Rad*_*yak 5

我会说在数据库中存储更好.因为

  1. 当您使用共享主机托管站点时,PHP使用相同的路径为所有用户存储会话,而不是在文件夹中的某个位置.

  2. 您可以轻松跟踪用户及其状态.

  3. 对于在多个服务器上运行的应用程序,您可以将所有会话数据存储在一个数据库中.

这篇文章可能有帮助.


Dor*_*use 2

在某个时间点,您将不得不在会话中存储一些内容。无论是所有会话变量还是只是会话表中一行的 ID。在这种情况下,更改存储在加密不良的会话中的 ID 并劫持不同的会话将相当容易。

考虑一下:

完整会话选项。它存储了用户 ID、用户名以及加密和散列的密码,以便每次调用页面时都会验证我的登录。要劫持其他人的会话,我必须知道他们的用户 ID、用户名和密码哈希,并能够克服会话固有的加密。

会话+数据库选项。它只存储了一个引用数据库中的行的会话 ID。要更改我想要的会话,我所要做的就是破坏会话的加密,然后将会话 ID 加一。然后我将被验证为在我之后登录的用户。

如果您有很多额外信息,您可以将登录详细信息存储在会话中,然后将任何与登录无关的数据存储在会话表中,但话又说回来,您也可能不需要额外的表并从任何相关表中提取数据你需要。