2011-02-10 40 views
4

背景:
我在一个基于PHP5.3构建的新项目的起始基础。我刚开始研究处理会话的方式,最初可以将会话保存到数据库。我会将所有的会话管理分离到一个单独的库中,以便于透明地迁移到memcached,单独的会话数据库服务器,或任何当时最好的解决方案。PHP5中的会话 - 内置会话与否?

我有点困惑什么会是一个很好的方法,虽然 - 有很多不同的想法在线如何处理会话变化依赖于PHP版本,我越读越多,我得到更多的困惑。

问题:
这里的,我认为是最合适的选项。我应该使用哪一个,为什么?是否有其他替代方案应该考虑?

选项1:
使用session_set_save_handler并为每个会话事件利用本机(内置)PHP的会话处理发挥到淋漓尽致创建自定义的功能,但仍保存会话数据库。会话将被编写为$_SESSION['identifier'] = 'value';

选项2:
建筑,就什么都没有做PHP的会议,只是作为任何数据库模型在我的数据库谈话的sessions表中的完整的会话类。会议将被编写为$this->sessions->write('identifier', 'value');

回答

2

我建议你采取后者的路线,但一个很酷的转折。

创建一个Session类,然后使用适配器模式将其扩展为DatabaseSessionCookieSession具体类。

覆盖session_save_handler在我的真实意见中似乎太过分了。

随着项目变得越来越大,通过包装类路由所有与会话相关的交互将为您提供更多的灵活性。

事情是这样的:

​​

用法:

$database_session = new Session(new DatabaseSession()); 
+0

当您单独调用时,会将“head”Session类存储到PHP会话中吗? – Industrial 2011-02-10 09:45:13

8

$_SESSION超全局实际上是在PHP中一个相当不错的功能。

根据您的软件解决方案的结果,第三方用户会更习惯于使用自定义会话处理程序在后台执行该操作,从而使用超级全局编写和读取数据。

通过Suhosin还有很好的安全增强功能,您在为自己开发会话存储时无需“担心”。