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