Session_write_close çağrıldıktan sonra nasıl oturum mesajı eklersiniz?


9

Unirgy'nin mükemmel uRapidFlow modülünü kullanıyoruz, ancak biraz can sıkıcı bir durumla karşılaştık. Profillerinden birini çalıştırdığınızda çağrı yaparlar session_write_close. Buradaki sorun, bir adminhtml denetleyicisinden bir işlem çalıştırmak istediğimizde, kullanıcıyı başarılı veya bilgilendirilmiş istisnalar hakkında bilgilendirmek için bir oturum flaş mesajı ayarlayamayacağımız anlamına gelir.

Oturum mesajı eklemek için işlem tamamlandıktan sonra oturumu yeniden başlatmak mümkün müdür?

Başlangıçta PHP bir oturumu yeniden başlatmak mümkün olup olmadığını emin değildi, ama kavram PHP kanıtı çalışır:

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

Yine de adminhtml oturumunda doğru bir flaş mesajı ayarlayamadım. Aşağıdakiler boyunca bir şey çağırabileceğimi düşündüm:

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

Ama bu işe yaramıyor gibi görünüyor.


Profil yürütme sırasında müşteriye mesaj göstermek istiyorsanız, günlükçü örneği almak ve mesaja iletmek için $ pofile-> getLogger () kullanabilirsiniz. Onları sayfada göstermekle aynı şey değil, ancak bunların kayıtlarına sahip olacaksınız
Petar Dzhambazov

Yanıtlar:


4

Bu çalışmalı:

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

Oturum sonra kaybolmaz session_write_close(), tekrar oturuma yazmak isterseniz tekrar açmanız gerekir. Kavramın ispatı:

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

Oturumdaki çağıran çağrı, session_start öğesinin çağrılmasını tetiklemez, çünkü yalnızca $ _SESSION ayarlanmamışsa (çağrıldıktan sonra olduğu anlaşılır session_write_close) çağrılır .
Peter O'Callaghan

Bunu yapmakla ilgilenen herkes için, düzgün çalışmasını sağlamak için yapmanız gerekir unset($_SESSION). Bunu yaptıktan sonra initoturumu doğru şekilde yeniden yükleyeceksiniz.
Peter O'Callaghan

@Cags Cevabımı güncelledim, doğru olup olmadığını kontrol edebilir misiniz?
Rick Kuipers

Bunun bir parçası olarak çağrılan olarak session_start gerekli değildir inityöntem çağrısı (kuyuda starthangi adlandırılır init). Bunun dışında işe yaramalı.
Peter O'Callaghan

@Cags Teşekkürler, cevabımı güncelledim! Geri bildirim ile geri geldiğiniz için teşekkür ederim :)
Rick Kuipers
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.