Session 为什么会话数据仅在CakePHP中的控制器中可用?

Session 为什么会话数据仅在CakePHP中的控制器中可用?,session,cakephp,cakephp-2.0,Session,Cakephp,Cakephp 2.0,所以,我喜欢CakePHP并经常使用它。当2.0问世时,我很高兴看到AuthComponent作为一个静态类在整个应用程序中都可用,这使很多事情变得更容易——也就是说,您不再需要将用户数据作为参数传递给模型方法 最近在一个项目中,我意识到需要从模型访问SessionComponent的方法。具体来说,当用户登录时,会执行一些检查,以查看该用户是否拥有对该站点的有效订阅。这些都是在模型中完成的。如果用户不再拥有有效的订阅,可能有以下几个原因。从模型中返回false似乎最容易,同时设置一条flash

所以,我喜欢CakePHP并经常使用它。当2.0问世时,我很高兴看到AuthComponent作为一个静态类在整个应用程序中都可用,这使很多事情变得更容易——也就是说,您不再需要将用户数据作为参数传递给模型方法

最近在一个项目中,我意识到需要从模型访问SessionComponent的方法。具体来说,当用户登录时,会执行一些检查,以查看该用户是否拥有对该站点的有效订阅。这些都是在模型中完成的。如果用户不再拥有有效的订阅,可能有以下几个原因。从模型中返回
false
似乎最容易,同时设置一条flash消息,给出过期订阅的原因。而不是像这样返回数组:

array('status' => 0, 'message' => 'You\'re not welcome here anymore')
需要在控制器中进行解释

还有一些时候我想在模型中处理会话,但我想到的就是这个例子

那么,我想知道,我想在模型中访问SessionComponent是对的吗?当我有这种需要时,我是否应该直接使用$\u会话?还是我做错了-有更好的编码方法吗?

您可以随时使用

CakeSession::read()
应用程序中的任何位置。模型中也是如此。 请参阅以前的帖子,如

但请注意,如果可能的话,你应该尽量避免。 模型被认为是尽可能无状态的-将它们与会话混合会使其变得越来越模糊。

您可以随时使用

CakeSession::read()
应用程序中的任何位置。模型中也是如此。 请参阅以前的帖子,如

但请注意,如果可能的话,你应该尽量避免。 模型被认为是尽可能无状态的-将它们与会话混合会使其变得越来越模糊。

根据CakePHP:

在CakePHP中通常避免使用$\u会话,而是 最好使用会话类

有几种不同的配置,您可以在其中存储会话数据f.ex。在数据库中。因此,通过使用
CakeSession
对会话配置的更改不会影响您访问会话数据的每个位置

我建议不要使用模型中的SessionComponent。更好地将参数传递给具有必要数据的模型。看看。

根据CakePHP:

在CakePHP中通常避免使用$\u会话,而是 最好使用会话类

有几种不同的配置,您可以在其中存储会话数据f.ex。在数据库中。因此,通过使用
CakeSession
对会话配置的更改不会影响您访问会话数据的每个位置


我建议不要使用模型中的SessionComponent。更好地将参数传递给具有必要数据的模型。看看。

将会话控制传递给MVC模型。您应该使用模型来做出决策,并使用控制器将这些决策反映到应用程序中。在正确的MVC环境中,模型甚至不知道您正在使用会话,更不用说操纵会话了


此外,使用$\u会话变量违反了框架封装。如果您发现自己需要这样做,是的,您在某个地方出错了。

将会话控制传递给模型违反了MVC。您应该使用模型来做出决策,并使用控制器将这些决策反映到应用程序中。在正确的MVC环境中,模型甚至不知道您正在使用会话,更不用说操纵会话了


此外,使用$\u会话变量违反了框架封装。如果您发现自己需要这样做,是的,您在某个地方出错了。

您可以使用
Authcomponent
session
在模型中的会话中写入和读取数据

App::uses('AuthComponent', 'Controller/Component');
App::import('Component', 'Session');
您可以使用以下函数写入和读取数据

CakeSession::write('Auth.User.id', '1');
debug(CakeSession::read());

您可以使用
Authcomponent
session

App::uses('AuthComponent', 'Controller/Component');
App::import('Component', 'Session');
您可以使用以下函数写入和读取数据

CakeSession::write('Auth.User.id', '1');
debug(CakeSession::read());