【问题标题】:Sessions in CakePHP 2.3CakePHP 2.3 中的会话
【发布时间】:2013-07-12 15:11:22
【问题描述】:

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

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

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

文档说明:

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

我有点惊讶:Cake 在 PHP 上运行,所以我希望 PHP 超全局变量能够工作。

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

在切换之前,我想知道:

  • 有没有办法让正常的 PHP $_SESSION 超全局在 Cakephp 2.3.7 中工作?
  • 如果不是:CakeSession::read 和 CakeSession::write 是正确的选择吗?

一些额外的信息:

  • 我正在 AppController 中调用 Session 组件
  • 我正在 AppController 中调用 Session 助手

【问题讨论】:

    标签: session cakephp


    【解决方案1】:

    一般来说,您可以访问 $_SESSION 本身,但是您还需要手动断言会话启动和其他事情——CakePHP 可以而且应该自行处理。 那么,当您有一个很好的包装器访问权限时,为什么还要麻烦呢?

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

    还有一个不错的站点效果:您不能使用包装方法触发任何“未定义索引”警告。如果尚未设置此键,它们将简单地返回 null。

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

    不,助手用于视图层。

    【讨论】:

    • 谢谢!我不这样做的原因是因为它是一个糟糕的工作。但如果这是最佳做法,我会这样做:)
    猜你喜欢
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 1970-01-01
    • 1970-01-01
    • 2013-12-19
    相关资源
    最近更新 更多