在MVC架构中创建会话的最合适位置在哪里?

时间:2013-05-06 22:43:39

标签: php session model-view-controller

我正在开发一个PHP应用程序,就像练习一样,我想知道会话创建在哪里更正确。

我在控制器中收到登录数据,然后我问我的模型是否存在该用户以及密码是否匹配。这个控制器应该处理会话创建吗?我只是找不到一个好的答案。

4 个答案:

答案 0 :(得分:3)

会话处理程序可以是根据需要在任何控制器中注入的组件,也可以是应用程序范围的单例。

我会在中型应用上采用第一种方法,并在微框架中使用后者,其中依赖性较小。

答案 1 :(得分:2)

首次使用该存储介质时,应初始化会话。

最有可能是:

namespace Mapper;

class Session 
{
    public function prepare()
    {
        session_set_cookie_params( ... ); // if needed
        session_start();
    }

    public function store(SomeInterface $object) { ... }
    public function retrieve(SomeInterface $object) { ... }
}

..在工厂将其发布到“常规应用程序”之前,在会话实例上调用prepare()方法。

基本上,从模型层的角度来看,会话只是另一种类型的存储,您可以使用某种映射器。这个映射器可以使用工厂在整个应用程序中共享,这可以确保模型层的所有部分都使用相同的对象来抽象会话。

控制器不应该甚至意识到会话是在模型层的某个地方使用的。控制器只知道模型层的一部分应该是控制器改变模型层状态的服务。

答案 2 :(得分:1)

您的应用程序都有一个引导程序文件,您可以在那里启动会话。 如果你的Session-Class有自动启动,那么在大多数情况下你都不关心它。如果您的MVC实现了拦截器模式,您可以为其创建一个插件,以启动您的会话。

控制器中的创建会话产生还原代码,其中一个重要原则是DRY(不要重复自己)。

答案 3 :(得分:-1)

您可以查看通常与MVC模式一起使用的“Front Controller”模式。

来自http://en.wikipedia.org/wiki/Front_Controller_pattern

  • Front Controller Pattern是多个模式目录中列出的软件设计模式。该模式涉及Web应用程序的设计。它“为处理请求提供了一个集中的入口点。”