Как добавить сообщение сеанса после вызова session_write_close?
Вопрос
Мы используем превосходный модуль Urapidflow от Unirgy, но столкнулись с раздражением. Когда вы запускаете один из их профилей, они звонят session_write_close
. Анкет Проблема состоит в том, что это означает, что если мы хотим запустить процесс от контроллера Adminhtml, мы не можем установить флэш -сообщение сеанса, чтобы сообщить пользователю об успехе или поймать исключения.
Можно ли перезапустить сеанс после завершения процесса, чтобы добавить сообщение сеанса?
Сначала я не был уверен, можно ли перезапустить сеанс в 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. Я думал, что смогу что -то назвать:
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';