Мы используем отличный модуль 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');
Но это не похоже на работу.
Ответы:
Это должно работать:
Сеанс не теряется после того
session_write_close()
, как , если вы захотите снова записать сеанс, вам придется открыть его снова. Подтверждение концепции:источник
session_write_close
).unset($_SESSION)
. После этогоinit
перезагрузите сессию правильно.init
вызывается как часть вызова метода (вstart
котором он вызываетсяinit
). Кроме этого, это должно работать.