ในโครงการสุดท้ายของฉันสำหรับ Drupal 6 ฉันบันทึกข้อมูลโดยใช้รหัสที่คล้ายกับโครงการต่อไปนี้:
$_SESSION['xxx'] = serialize($data);
ใน Drupal 7 มันไม่ทำงาน
ฉันจะบันทึกข้อมูลเซสชันสำหรับผู้ใช้ที่ไม่ระบุชื่อใน Drupal 7 ได้อย่างไร
ในโครงการสุดท้ายของฉันสำหรับ Drupal 6 ฉันบันทึกข้อมูลโดยใช้รหัสที่คล้ายกับโครงการต่อไปนี้:
$_SESSION['xxx'] = serialize($data);
ใน Drupal 7 มันไม่ทำงาน
ฉันจะบันทึกข้อมูลเซสชันสำหรับผู้ใช้ที่ไม่ระบุชื่อใน Drupal 7 ได้อย่างไร
คำตอบ:
มันเป็นเพราะเซสชั่น drupal บันทึกด้วยกุญแจหมายความว่าคุณควรทำอะไรเช่นนี้
$_SESSION['yourkey']['xxx'] = serialize($data);
คุณสามารถลองสิ่งนี้
function lists_session($key, $value = NULL) {
global $user;
static $storage;
// If the user is anonymous, force a session start.
if(!user->uid) {
drupal_session_start();
}
if ($value) {
$storage[$key] = $value;
$_SESSION['lists'][$key] = $value; // I use 'lists' in case some other module uses 'type' in $_SESSION
}
else if (empty($storage[$key]) && isset($_SESSION['lists'][$key])) {
$storage[$key] = $_SESSION['lists'][$key];
}
return $storage[$key];
}
ดังนั้นเพื่อบันทึกตัวแปรในเซสชัน:
lists_session("xxx", serialize($data));
และเพื่อรับค่าเพียงใช้:
$myVar = lists_session("xxx");
และเช่นเดียวกับ MOLOT กล่าวถึงบางครั้งเซสชั่นที่ไม่ติดดาวสำหรับผู้ใช้ที่ไม่ระบุชื่อจากนั้นคุณควรdrupal_session_start()
ด้วยตนเอง
ตามเอกสารนั่นคือทั้งหมดที่คุณควรทำ
ซึ่งหมายความว่ามีข้อผิดพลาดหรือหน้าของคุณกำลังถูกแคชสำหรับผู้ใช้แบบไม่ใช้งานเพื่อไม่ให้มีการอ่านข้อมูลเซสชัน ฉันจะตรวจสอบการตั้งค่าแคชของคุณในครั้งแรก
บางครั้ง Drupal 7 ไม่เริ่มเซสชันโดยอัตโนมัติสำหรับผู้ใช้ที่ไม่ระบุชื่อ หากต้องการใช้เซสชันสำหรับเซสชันคุณอาจต้องบังคับให้เซสชันเริ่มต้นด้วยdrupal_session_startเพื่อให้สามารถใช้งาน$_SESSION
ได้
หลังจากคุณบันทึกข้อมูลโดยทำตาม:
$_SESSION['xxx'] = serialize($data);
ต้องการฟังก์ชั่นอื่น:
drupal_session_start();
เนื่องจากตารางเซสชั่นต้องการบันทึกที่มี id = 0 คุณสามารถแทรกบันทึกด้วยตนเองด้วย id = 0
สร้างผู้ใช้ที่มี uid = 0 ในตารางผู้ใช้เนื่องจาก drupal ใช้ uid นั้นเสมอสำหรับผู้ใช้ที่ไม่ระบุชื่อ