我们通过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';
许可以下: CC-BY-SA归因
scroll top