使用MVC和OO PHP会话的最佳方式

时间:2008-10-04 17:40:37

标签: php oop session

我一直在使用会话,MVC设计和面向对象的PHP。我应该在哪里保存或从会话中检索数据?我想从方法中检索它,所以我不必将数据传递给方法。什么是最佳做法?

5 个答案:

答案 0 :(得分:3)

我通常把它放在控制器里面。它只是有意义..控制器决定发生了什么,为什么不让它决定是否允许人们做所请求的操作。 通常,MVC系统中有多个控制器。例如。 BaseController(abstract - common),NonSessionController扩展BaseController(例如:用于静态页面),SessionController扩展BaseController(主会话处理在这里 - 这可能是抽象的)。如果你有不同的用户类型,你可能想要对这些控制器进行多态化,例如:AdminController,UserController等。

答案 1 :(得分:3)

就个人而言,我是Zend_Session包装类的忠实粉丝。我更喜欢使用面向对象样式的数据,使用包装器的命名空间优势是一个巨大的优势。

哪一种看起来更好?

$_SESSION['Zend_Auth']['user'] = "myusername";

$authNamespace = new Zend_Session_Namespace('Zend_Auth');
$authNamespace->user = "myusername";

我更喜欢使用访问器给你的外观。

注意:在MVC系统中,无论选择何种方法,都应始终在控制器中获取/设置会话数据。

答案 2 :(得分:1)

我已经尝试过几种方法,包括使用静态包装类来处理它,但我总是回过头来单独使用超全局数组。我仍然使用包装器进行身份验证检查和其他重复性任务,但最终,使用库存设置对我来说更简单,更简洁。

答案 3 :(得分:0)

我认为这取决于将使用重新获取的数据的范围,如果它仅在方法中使用,那么为什么你应该在外部进行检索,并且会话总是在超全局变量中可用,最好将其本地化只在需要的时候。

答案 4 :(得分:0)

我不打扰会话包装器。你不会获得足够的价值来限制这些限制。通过超全局允许您使用您想要的任何类型(希望是理智的)数据结构。我的会话数据总是最终是2级或更多级别的数组数据,这对于通过会话包装器进行管理来说太繁琐了。

超级全局甚至不限制您使用save handler将数据库存储在数据库中,这对于可伸缩性来说非常好。