Bagaimana Anda menambahkan pesan sesi setelah session_write_close dipanggil?

9

Kami menggunakan modul uRapidFlow yang sangat baik oleh Unirgy, tetapi telah mengalami sedikit gangguan. Ketika Anda menjalankan salah satu profil mereka, mereka memanggil session_write_close. Masalahnya adalah ini berarti bahwa jika kita ingin menjalankan proses dari pengontrol adminhtml, kita tidak dapat mengatur pesan sesi flash untuk menginformasikan pengguna tentang keberhasilan atau pengecualian yang tertangkap.

Apakah mungkin untuk memulai kembali sesi setelah proses selesai, untuk menambahkan pesan sesi?

Saya awalnya tidak yakin apakah mungkin untuk memulai kembali sesi dalam PHP, tetapi bukti konsep PHP berfungsi:

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';

Saya belum dapat mengatur pesan flash dengan benar pada sesi adminhtml. Saya pikir saya mungkin bisa menyebut sesuatu seperti:

Mage::getSingleton('adminhtml/session')
    ->init('core', 'adminhtml')
    ->addSuccess('Whoop');

Tapi ini sepertinya tidak berhasil.

Peter O'Callaghan
sumber
Jika Anda ingin menampilkan pesan kepada pelanggan selama eksekusi profil, Anda dapat menggunakan $ pofile-> getLogger () untuk mendapatkan instance dari logger dan meneruskan pesan ke sana. Ini tidak sama dengan menunjukkan mereka di halaman, tetapi Anda akan memiliki catatan mereka
Petar Dzhambazov

Jawaban:

4

Ini seharusnya bekerja:

unset($_SESSION);
Mage::getSingleton('adminhtml/session')
    ->init('core', 'adminhtml')
    ->addSuccess('Whoop');

Sesi tidak hilang setelah session_write_close(), jika Anda ingin menulis lagi, Anda harus membukanya kembali. Bukti dari konsep:

<?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';
Rick Kuipers
sumber
Memanggil init pada sesi tidak akan memicu session_start dipanggil, karena hanya dipanggil jika $ _SESSION tidak disetel (yang tampaknya setelah panggilan session_write_close).
Peter O'Callaghan
Untuk siapa pun yang tertarik melakukan ini, untuk membuatnya berfungsi dengan benar, Anda harus melakukannya unset($_SESSION). Setelah melakukan ini initakan memuat ulang sesi dengan benar.
Peter O'Callaghan
@Cags Saya telah memperbarui jawaban saya, dapatkah Anda memeriksa apakah itu benar?
Rick Kuipers
The session_start tidak diperlukan karena dipanggil sebagai bagian dari initpemanggilan metode (baik startyang dipanggil oleh init). Selain itu, itu harus bekerja.
Peter O'Callaghan
@Cags Terima kasih, saya memperbarui jawaban saya! Saya menghargai Anda kembali dengan umpan balik :)
Rick Kuipers