4

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

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

4

4 回答 4

3

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

我会在中型应用程序上使用第一种方法,并在依赖较少的微框架中使用后者。

于 2013-05-06T22:47:12.453 回答
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()工厂将会话实例发布到“通用应用程序”之前,在其中调用方法。

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

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

于 2013-05-06T22:56:29.103 回答
1

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

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

于 2013-05-06T23:32:46.103 回答
-1

您可以查看 MVC 模式常用的“前端控制器”模式。

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

  • 前端控制器模式是在多个模式目录中列出的软件设计模式。该模式与 Web 应用程序的设计有关。它“为处理请求提供了一个集中的入口点”。
于 2013-05-06T23:25:58.920 回答