【发布时间】:2015-03-06 06:50:42
【问题描述】:
我通过 ajax 请求设置了一个会话变量,就像在结帐页面中一样
Mage::getSingleton('customer/session')->setMyValue($value_from_post_data);
以上设置在自定义模块的控制器中。
我有一个事件观察者在这里观察 checkout_onepage_controller_success_action,当我访问会话时,我没有找到我创建的会话变量 my_value。
注意: 会话 ID 相同。他们没有变化。设置会话值后,我打印了整个会话数据以确认,setMyValue 在会话中创建了 my_value。
所以 ajax 请求已经完成了它的工作。它设置了变量 但是观察者会拾取旧的会话数据。为什么会这样,给我一个解决方法
这是 magento 中的错误吗?有没有一种方法可以让 magento 刷新会话对象。比如说,比如
Mage::getModel('core/session')->pleaseMagentoRefreshSessionObject();
这样我就可以在内存中获取新的会话对象了。
【问题讨论】:
-
您能否也显示您在观察者中获取会话数据的代码?
-
像往常一样,$data = Mage::getSingleton('customer/session')->getMyValue();该代码是专有的。事件名称是 checkout_onepage_controller_success。这是我获得会话值的地方。会话 ID 相同。会话变量是相同的。它只是缺少的那个特定变量
-
我能建议的最明智的做法是使用标准 PHP 方式 ( $_SESSION ) 设置和获取会话变量,以确定它是否与使用 Magento 的 Singleton 有关
-
@jevgeni Bogatyrjov:我已经尝试过了。同样的事情发生了..会话被创建但不更新
-
你试过添加 session_write_close();将值设置为会话后?