使用或不使用session_set_save_handler?

时间:2010-06-29 11:11:13

标签: php mysql database authentication session

我正在玩PHP中创建用户登录系统。

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

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

...然而

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

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

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

先谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

将会话数据存储在数据库中起初可能有点棘手,但是一旦设置了类或功能,那么与文件系统存储相比,您可以获得一些潜在的优势。问题是您的系统是否需要这些优势。我认为,这些是将会话数据存储在数据库中的最常见原因之一:

安全性:如果使用共享主机,则会话数据可能保存在磁盘的其他用户可访问的区域中。这可能会对您的申请构成安全风险。

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

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

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

还需要考虑的是,您可以通过存储其他信息来增强会话信息,例如IP地址,登录和注销时间等。在尝试阻止会话劫持时,此类信息非常有用。

因此,除了可伸缩性问题之外,我认为这些都是非常主观的。您需要权衡实现数据库会话存储所需的额外工作,并带来可能的好处。

答案 1 :(得分:1)

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