会话和 Cookie 安全性和开销


Sessions and cookies security and overhead

>我有一个登录系统,用户可以在其中选中"记住我"选项。当用户选中该选项时,我将session_id存储到 cookie 中,并将他的session_id、ip、浏览器信息等写入数据库会话表中。因此,当用户回来时,我确保cookie没有根据存储在会话表中的session_id/ip/browser/etc伪造。

现在看来,这可能是大量的开销和数据库写入。有没有更好、更安全的方法可以在没有这么多开销的情况下做到这一点?

这是一个权衡:当数据没有存储在数据库中时,它最终会到达PHP存储会话数据的服务器的本地文件系统。换个说法:什么更慢?一次随机访问数据库命中还是一次随机存取磁盘命中?。

我发现将会话存储到数据库是一个更优雅的解决方案,因为跟踪用户及其会话比根据文件系统内容猜测更容易。它还允许您随时手动注销用户或模拟登录会话(一次性密码重置)。

如果您使用的是MySQL,请将您正在使用的"会话"表的引擎设置为MEMORY,您将始终具有非常快的查找,不会影响用户体验。