【问题标题】:what's the best way to save sessions in a database?在数据库中保存会话的最佳方法是什么?
【发布时间】:2010-09-01 02:35:24
【问题描述】:

我正计划制作自己的自定义会话处理功能。我想将它保存在数据库中,但我有一些疑问。

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

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

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

    • 如果用户退出连接,应用停止运行,还是会调用析构函数?

那么,你们觉得呢?你建议我怎么做?

【问题讨论】:

    标签: php database session


    【解决方案1】:

    我一直在 Zend 和 Symfony 中使用 DB 会话,所以它绝对可行,当然会有成本,但很可能没什么大不了的。

    通常,这些处理程序的工作方式是使用session_set_save_handler,除了写入数据的实际调用函数外,它正常工作。但是请注意有关对象破坏的警告。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 它与保存历史会话数据没有任何关系。通常它是关于在分布式、扩展或负载平衡部署中跨应用程序的多个实例访问相同的会话数据。 IT 本质上与您对 memcache 所做的事情相同,但设置和管理速度较慢且更容易。
        猜你喜欢
        • 2016-05-19
        • 2014-08-04
        • 1970-01-01
        • 1970-01-01
        • 2011-02-14
        • 2018-06-16
        • 1970-01-01
        • 1970-01-01
        • 2020-11-03
        相关资源
        最近更新 更多