session_write_close被调用后如何添加会话消息?
题
我们通过Unirgy使用出色的尿尿流模块,但遇到了一些烦恼。当您运行他们的个人资料之一时,他们会打电话给 session_write_close
. 。问题的问题在于,这意味着如果我们希望从AdminHTML控制器运行一个流程,我们将无法设置会话flash消息以告知用户成功或发现异常。
为了添加会话消息,是否可以在过程完成后重新启动会话?
最初,我不确定是否可以在PHP中重新启动会话,但是概念证明PHP有效:
session_start();
// if this is the second run, show the value
if (!empty($_SESSION['foo'])) {
echo $_SESSION['foo'], PHP_EOL;
}
// set an initial value
$_SESSION['foo'] = 'bar';
// start running profile
session_write_close();
// after running profile
session_start();
// set a value to see if it takes
$_SESSION['foo'] = 'foo';
不过,我无法在AdminHTML会话上正确设置Flash消息。我以为我可能可以按照以下方式调用一些东西:
Mage::getSingleton('adminhtml/session')
->init('core', 'adminhtml')
->addSuccess('Whoop');
但这似乎不起作用。
解决方案
这应该有效:
unset($_SESSION);
Mage::getSingleton('adminhtml/session')
->init('core', 'adminhtml')
->addSuccess('Whoop');
会议不会在 session_write_close()
, ,如果您想再次写入会话,则必须重新打开它。概念证明:
<?php
session_start();
// if this is the second run, show the value
if (!empty($_SESSION['foo'])) {
echo $_SESSION['foo'], PHP_EOL;
}
// set an initial value
$_SESSION['foo'] = 'bar';
// start running profile
session_write_close();
// after running profile
session_start();
var_dump($_SESSION);
//// set a value to see if it takes
$_SESSION['test'] = 'foo';