CakePHP 2.3中的会话

时间:2013-07-14 19:02:03

标签: session cakephp

我刚将我的应用程序从CakePHP 1.3升级到2.3。升级控制台远非完美,但经过一天的调试后,我已经解决了大部分问题。只有一个,它是一个很大的:会话

在我的应用程序中,我没有使用任何花哨的$ this-> Session或CakeSession :: read登录,我一直依赖 PHP Superglobal $ _SESSION 。在1.3,这工作正常。

输入CakePHP 2.3:Sessions似乎只在我的函数中的某些地方起作用,并且由于未知原因,它们有时是空的。一个例子:在控制器中的一个函数的第1行,$ _SESSION ['key']给我一个空数组,在第10行它会给我一个很好的填充数组,在我看来它再次为空。非常令人沮丧。我已经能够通过在不起作用时调用session_start()来解决这个问题,但我不想走那条路。

文档说明:

  

在CakePHP中通常避免使用$ _SESSION,而是首选使用Session类。

我有点惊讶:Cake在PHP上运行,所以我希望PHP超级全局可以工作。

我正在考虑切换到CakeSession :: read和CakeSession :: write,但这是一项艰巨的任务:我在我的应用程序中使用Sessions。

在转换之前,我想知道:

  • 有没有办法在Cakephp 2.3.7中使普通的PHP $ _SESSION超全局工作?
  • 如果不是:CakeSession :: read和CakeSession ::编写正确的替代方案吗?

一些额外信息:

  • 我在AppController中调用Session组件
  • 我在AppController中调用Session帮助器

1 个答案:

答案 0 :(得分:1)

通常,你可以访问$ _SESSION本身,但是你需要手动断言会话启动和其他事情 - CakePHP可以而且应该自己处理。 那么,当你有一个很好的包装器访问它时,为什么还要费心呢?

我真的不明白为什么这需要成为一个问题。通常有更大的鱼可以炒。 当我说每个人都使用干净整洁的组件/助手/ CakeSession访问时,请相信我。

同样是一个不错的网站效果:你不能触发任何"未定义的索引"使用包装器方法的警告。如果尚未设置此键,它们将仅返回null。

I am calling the Session component in my AppController
I am calling the Session helper in my AppController

不,帮助者是视图层。