我想知道使用PHP或存储中的$ _Session变量并从SQL数据库中检索的$ _SESSION变量在会话中存储临时数据(与该会话相关)更有效?

感谢您的时间。

有帮助吗?

解决方案

请记住,会话变量是由存储机制支持的,也就是说,当请求完成时,会话由会话处理程序编写,默认情况下,这就是文件。在下一个请求中,它将从该文件中拉回(或Session处理程序使用的其他内容)。

如果您要在每个请求上阅读和编写此数据,只需坚持使用$ _Session变量,连接,查询和更新数据库的开销不会比默认的$ _Session更快。

如果您要运行多个负载平衡的服务器,并且需要在它们之间共享会话数据时,您可能只想使用数据库支持的会话。在这种情况下,如果您发现数据库会话的开销正在以明显的程度放慢网站的速度,则可能会考虑在Web服务器和数据库之间粘贴。

其他提示

我对从数据库或文件阅读不太了解,但我认为“ DB访问比其他访问更慢”是正确的。我从学校的课程中学到了与I/O访问相比,网络延迟可以忽略不计。如果我们将DB用于会议,我们将有一些优势:

我们不必担心很多服务器,因为没有文件系统不同。

我还认为,存储/从数据库中读取/读取某些内容比文件系统更容易。

另外,如果我们使用共享托管,则将会话存储在数据库中是安全性的主要优势。

如果我错了,请纠正我。我还有很多东西要学习。谢谢。

这实际上取决于您打算存储的数据量以及您打算处理的流量量。如果数据最小,并且网站不需要扩展到一个Web服务器之外,则一定要使用默认的会话处理程序将会话数据写入Web服务器的文件系统。

如果您需要扩展一个框,建议您将会话数据存储到内存数据库中,例如Memcached或常规数据库。你可以 覆盖PHP中的会话处理程序 并在使用$ _Session时编写自己的实现以存储到数据库中。

更有效的效率将取决于您要存储的数据量以及您打算使用临时数据做什么。有时我在文件存储中将5兆位存储在会话数据中,这是一个可怕的性能杀手。但是5兆的状态是很多,您真的不应该到达那里。

无论如何,您都可以配置PHP的会话为 存储在数据库表中 并获得两全其美。

不过,如果数据不正确地特征用户会话,则不应使用会话并使用某些模型对象。

PHP会议比DB访问更快。但是PHP会议有一些 已知的问题.

如果您想真正快速访问时间,同时避免了PHP会话管理的陷阱,则可能需要查看Memcached。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top