Как добавить сообщение сеанса после вызова закрытия записи сеанса?


Мы используем отличный модуль 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');

Но, похоже, это не работает.

Author: Peter O'Callaghan, 2013-01-25

1 answers

Это должно сработать:

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';
 4
Author: Rick Kuipers, 2013-12-02 15:05:36