2009-06-08 61 views

回答

21

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

如果您正在读取和写入每个请求的数据,只需使用$ _SESSION变量,连接,查询和更新数据库的开销将不会比默认的$ _SESSION更快。

如果您运行多个负载平衡服务器并需要在它们之间共享会话数据,您可能只想使用数据库支持的会话。在这种情况下,如果您发现数据库会话的开销会使您的网站变慢,那么可以考虑在Web服务器和数据库之间插入memcached。

+3

负载均衡器提示。 – foxybagga 2013-02-28 00:18:04

1

什么更有效率取决于您想要存储的数据量以及您打算如何处理临时数据。我有时会在会话数据中存储5兆字节的文件存储,这是一个糟糕的性能杀手。但是5个州的状态非常糟糕,你真的不应该去那里。

无论如何,你可以配置PHP的会话为stored in a database table,并获得两全其美。

但是,如果数据不是用户会话的正确特征,那么您不应该使用会话并使用某个模型对象。

+0

我认为5MB和会话数据意味着某处出了问题。 :) – 2011-06-27 14:08:34

0

PHP会话比数据库访问更快。但是PHP会话有一些known issues

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

2

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

如果您需要扩展到一个盒子以外,建议您将会话数据存储到内存数据库(如memcached或常规数据库)中。您可以使用$ _SESSION编写您自己的实现以存储到数据库,您可以编写override the session handler in PHP

3

我不太了解从数据库或文件读取数据,但我不认为“数据库访问速度比其他数据速度慢”属实。我从我的学校课程中得知,与I/O访问相比,网络延迟是微不足道的。如果我们使用DB进行会话,我们有一些优势:

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

我也认为从/到数据库存储/读取数据比文件系统更容易。另外,如果我们使用共享主机,将会话存储在数据库中是安全性的主要优势。

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