คุณจะเพิ่มข้อความเซสชันหลังจากที่มีการเรียกใช้ session_write_close ได้อย่างไร


9

เราใช้โมดูล 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');

แต่นี่ดูเหมือนจะไม่ทำงาน


หากคุณต้องการแสดงข้อความถึงลูกค้าในระหว่างการดำเนินการกับโปรไฟล์คุณอาจใช้ $ pofile-> getLogger () เพื่อรับอินสแตนซ์ของตัวบันทึกและส่งข้อความไปให้ มันไม่เหมือนกับการแสดงพวกเขาในหน้า แต่คุณจะมีบันทึกของพวกเขา
Petar Dzhambazov

คำตอบ:


4

สิ่งนี้น่าจะใช้ได้:

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

การเรียกใช้ init บนเซสชันจะไม่ทริกเกอร์ให้เรียก session_start เนื่องจากจะถูกเรียกเฉพาะเมื่อไม่ได้ตั้งค่า $ _SESSION (ซึ่งดูเหมือนว่าจะเกิดขึ้นหลังจากการโทรsession_write_close)
Peter O'Callaghan

unset($_SESSION)สำหรับใครที่สนใจในการทำเช่นนี้เพื่อที่จะทำให้มันทำงานอย่างถูกต้องคุณจะต้อง หลังจากทำเช่นนี้initจะรีโหลดเซสชันอย่างถูกต้อง
Peter O'Callaghan

@Cags ฉันได้อัปเดตคำตอบของฉันคุณสามารถตรวจสอบว่ามันถูกต้องหรือไม่?
Rick Kuipers

ไม่จำเป็นต้องใช้ session_start เนื่องจากได้รับการเรียกว่าเป็นส่วนหนึ่งของinitการเรียกเมธอด ( startซึ่งถูกเรียกโดยinit) นอกจากนั้นควรใช้งานได้
Peter O'Callaghan

@Cags ขอบคุณฉันอัพเดตคำตอบแล้ว! ฉันขอขอบคุณที่คุณกลับมามีความคิดเห็น :)
ริก Kuipers
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.