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

使用MVC和OO PHP会话的最佳方法,php,oop,session,Php,Oop,Session,我一直在处理会话、MVC设计和面向对象的PHP。我应该在哪里保存或检索会话中的数据?我想从方法中检索它,这样就不必将数据传递给方法。最佳实践是什么?我已经尝试了几种方法,包括使用静态包装类来处理它,但我总是回到只使用超全局数组本身。我仍然使用包装器进行身份验证检查和其他重复性任务,但是,最终,使用stock设置对我来说更容易,也更不繁琐 我认为这取决于检索数据的使用范围,如果它只在方法内部使用,那么为什么要在外部检索它,并且会话总是在超全局变量中可用,最好只在需要时对其进行本地化。我通常将其放在

我一直在处理会话、MVC设计和面向对象的PHP。我应该在哪里保存或检索会话中的数据?我想从方法中检索它,这样就不必将数据传递给方法。最佳实践是什么?

我已经尝试了几种方法,包括使用静态包装类来处理它,但我总是回到只使用超全局数组本身。我仍然使用包装器进行身份验证检查和其他重复性任务,但是,最终,使用stock设置对我来说更容易,也更不繁琐

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

我通常将其放在控制器内部。这很有道理。。控制器决定发生什么,为什么不让它决定是否允许人们执行请求的操作。
通常,MVC系统中有多个控制器。例如,BaseController(抽象-通用)、NonSessionController扩展BaseController(例如:用于静态页面)、SessionController扩展BaseController(此处主要会话处理-这可能是抽象的)。例如,如果您有不同的用户类型,您可能希望对该控制器进行变形,例如:AdminController、UserController等。

我不想麻烦使用会话包装器。你将无法获得足够的收益来应对这些限制。浏览超全局允许您使用任何类型(希望是正常的)数据结构。我的会话数据总是以2个或更多级别的数组数据结束,这太单调了,无法通过会话包装器进行管理


superglobal甚至没有限制您使用PHP将会话数据存储在数据库中,这对于可伸缩性非常好。

就个人而言,我是包装器类的超级粉丝。我更喜欢以面向对象的方式处理数据,使用包装器的名称空间优势是一个巨大的优势

你觉得哪一个更好看

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

我更喜欢使用访问器给您带来的外观

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

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