【问题标题】:To use, or not to use, session_set_save_handler?使用还是不使用 session_set_save_handler?
【发布时间】:2011-03-09 13:51:54
【问题描述】:

我正在尝试在 php 中创建用户登录系统。

我一直在研究这篇文章 (http://www.evolt.org/node/60384) 来解决这个问题。

在上面的文章中,作者使用了 $_SESSION 和他自己的自定义数据库表的组合来存储用户信息。

不过……

我还遇到过许多推荐使用 session_set_save_handler 来配置 php 会话以本地使用数据库的文章。 (我猜这是一种较新的技术。)

我想知道:如果我打算在数据库中设置一个“activeUsers”表来记录会话数据,那么使用 session_set_save_handler 是否更有意义? (看来如果我使用数据库来存储一些会话信息,我还不如省掉文件系统会话。)

或者将 php 会话保留为其默认文件系统形式,然后针对我的自定义数据库表检查用户登录是否有一些优势?

感谢(提前)您的帮助。

【问题讨论】:

    标签: php mysql database authentication session


    【解决方案1】:

    在数据库中存储会话数据一开始可能有点棘手,但是一旦你设置了一个类或函数来执行此操作,那么你将获得一些优于文件系统存储的潜在优势。问题是您的系统是否需要这些优势。我认为,这些是在数据库中存储会话数据的最常见原因之一:

    安全性:如果使用共享主机,会话数据可能保存在系统其他用户可以访问的磁盘区域中。这可能会给您的应用程序带来安全风险。

    可扩展性:如果您的应用程序由多个服务器处理(例如,一个服务器场_,您需要确保来自同一客户端的多个请求,这些请求可能由不同的服务器处理,每个都接收相同的会话数据。如果会话数据在数据库中,这很容易做到。

    性能:数据库存储可能比文件系统存储提高性能,但这在很大程度上受到服务器配置的影响。

    数据库交互:根据您的会话数据的角色以及您的应用程序如何使用它,如果会话数据和相关信息都在数据库中,则可能会更容易检索这些数据。 p>

    另外需要考虑的是,您可以通过存储额外信息(例如 IP 地址、登录和注销时间等)来增强会话信息。在尝试防止会话劫持时,此类信息可能很有用。

    所以,除了可扩展性问题之外,我认为这都是相当主观的。您需要权衡实现数据库会话存储所需的额外工作,以及可能带来的好处。

    【讨论】:

    • 感谢迈克的回复。回顾这 4 个原因,没有一个适用于我的情况。所以我不担心使用常规会话 - except - 我打算无论如何创建一个数据库表“activeUsers”。我仍然不清楚让会话本身使用数据库是否更有意义,如果某些用户“会话”信息将以任何方式进入数据库。
    • @Travis:听起来好像您需要将会话数据存储在数据库中,但如果您这样做,您的应用程序最终可能会更干净一些。如果您不想编写自己的处理程序,可以尝试使用 Pear HTTP_Session2 包。
    【解决方案2】:

    如果你使用它,你需要制作自己的垃圾收集器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-07
      • 1970-01-01
      • 1970-01-01
      • 2019-07-12
      • 1970-01-01
      • 2017-04-26
      • 2014-04-05
      相关资源
      最近更新 更多