我想知道哪个更高效,在PHP中使用$ _SESSION变量在会话中存储临时数据(与该会话相关),或者从SQL数据库存储和检索?
感谢您的时间。
答案 0 :(得分:21)
请记住,会话变量由存储机制支持,也就是说,当请求完成时,会话处理程序会写入会话,默认情况下这是一个文件。在下一个请求中,它将从该文件(或会话处理程序使用的任何其他内容)中撤回。
如果您在每个请求上读取和写入此数据,只需坚持使用$ _SESSION变量,连接,查询和更新数据库的开销不会比默认的$ _SESSION快。
如果您运行多个负载平衡的服务器并且需要在它们之间共享会话数据,那么您可能只想使用数据库支持的会话。在这种情况下,如果您发现数据库会话的开销会使您的网站速度显着降低,您可能会考虑在您的Web服务器和数据库之间粘贴memcached。
答案 1 :(得分:3)
我不太了解从数据库或文件中读取数据,但我不认为“数据库访问比其他人慢”是正确的。我从学校的课程中了解到,与I / O访问相比,网络延迟可以忽略不计。如果我们使用DB进行会话,我们有一些优势:
我们不必担心许多服务器,因为没有不同的文件系统。
我还认为向/从数据库存储/读取内容比文件系统更容易。
此外,如果我们使用共享主机,则在数据库中存储会话是安全性的主要优势。
如果我错了,请纠正我。我还有很多东西需要学习。感谢。答案 2 :(得分:2)
这实际上取决于您要存储的数据量以及您打算处理的流量。如果数据很小并且站点不需要扩展到一个Web服务器之外,那么请务必使用默认会话处理程序将会话数据写入Web服务器的文件系统。
如果需要扩展到一个框以外,建议您将会话数据存储到内存数据库(如memcached或常规数据库)中。在使用$ _SESSION时,您可以override the session handler in PHP编写自己的实现来存储到数据库。
答案 3 :(得分:1)
效率更高将取决于您要存储的数据量以及您打算如何处理临时数据。我有时在文件存储中存储了5兆的会话数据,这是一个可怕的性能杀手。但5美元的状态是非常多的,你真的不应该到那里。
无论如何,您可以将PHP的会话配置为stored in a database table并充分利用这两个世界。
但是,如果数据不是用户会话的正确特征,那么您不应该使用会话并使用某些模型对象。
答案 4 :(得分:0)
PHP会话比数据库访问快。但PHP会话有一些known issues。
如果您想要快速访问时间,可能需要查看memcached,同时避免PHP会话管理的陷阱。