Come si fa ad aggiungere un messaggio sessione dopo session_write_close si chiama?
Domanda
utilizzare il modulo di eccellente uRapidFlow da Unirgy, ma hanno funzionato in un po 'di un fastidio. Quando si esegue uno dei loro profili, che chiamano session_write_close
. Il problema di questo è che significa che se si vuole eseguire un processo da un controller adminhtml non possiamo impostare un messaggio sessione di flash per informare l'utente di successo o eccezioni catturati.
E 'possibile riavviare la sessione dopo che il processo è completo, al fine di aggiungere un messaggio sessione?
I inizialmente non era sicuro se era possibile riavviare una sessione in PHP, ma la prova di concetto PHP funziona:
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';
non sono stato in grado di impostare correttamente un messaggio flash sulla sessione adminhtml però. Ho pensato che potrei essere in grado di chiamare qualcosa sulla falsariga di:
Mage::getSingleton('adminhtml/session')
->init('core', 'adminhtml')
->addSuccess('Whoop');
Ma questo non sembra funzionare.
Soluzione
Questo dovrebbe funzionare:
unset($_SESSION);
Mage::getSingleton('adminhtml/session')
->init('core', 'adminhtml')
->addSuccess('Whoop');
La sessione non è perso dopo session_write_close()
, se si desidera scrivere alla sessione di nuovo si dovrà riaprirlo però. Proof of concept:
<?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';