在数据库中保存会话的最佳方式是什么?

问题描述:

我打算做我自己的自定义会话处理函数。我想将它保存在数据库中,但我有一些疑问。在数据库中保存会话的最佳方式是什么?

  • 它是可行的或只会减慢我的应用程序?

  • 我有每个set后保存会话或可我只是将它保存一次全部?因为我有这个想法把这个函数放在类的析构函数方法中。所以,当程序结束时,它会将数据保存在数据库中。

    • 但我该如何使用我的其他类(数据库类)呢​​,确保它不会在会话类之前被破坏?

    • 如果用户退出的连接和应用程序停止运行时,析构函数仍然会叫什么名字?

这样,你们觉得呢?你建议我做什么?

我使用DB会话的所有与Zend和Symfony的时间,以便其绝对可行的,会有课程,但最有可能没有显著的成本。

通常这些处理程序的工作方式是使用session_set_save_handler它工作正常,除了所谓的实际功能,写入数据的方式。但要注意有关物体破坏的警告。

是的,它一般会比PHP的本地会话处理程序稍微慢一些,但是它不应该是明显的。这是除非您有文件锁定问题的问题(如Windows一样)

为什么要永久存储会话数据? 通常人们使用不同的会话处理程序来加快应用程序的速度(我们使用memcache进行会话,因为我们的应用程序非常复杂且分布广泛,我们希望它运行得更快)。我认为这个要求是糟糕的应用程序设计,如果你想以某种方式跟踪你的访问者,有很多更好的方法来做到这一点。或者,您正在使用会话来处理不太适合或不适合的事情。当然,我可以想象,可能会有这样的要求,只是我不认为这是事实。

+0

它与保留历史会话数据没有任何关系。通常,它关于在分布式,缩放或负载平衡部署中跨应用程序的多个实例访问相同的会话数据。 IT与使用memcache进行基本相同的事情,尽管设置和管理更慢,更容易。 – prodigitalson 2010-09-03 02:16:59