ฉันจะบันทึกข้อมูลเซสชันสำหรับผู้ใช้ที่ไม่ระบุชื่อได้อย่างไร


20

ในโครงการสุดท้ายของฉันสำหรับ Drupal 6 ฉันบันทึกข้อมูลโดยใช้รหัสที่คล้ายกับโครงการต่อไปนี้:

$_SESSION['xxx'] = serialize($data);

ใน Drupal 7 มันไม่ทำงาน

ฉันจะบันทึกข้อมูลเซสชันสำหรับผู้ใช้ที่ไม่ระบุชื่อใน Drupal 7 ได้อย่างไร

คำตอบ:


4

มันเป็นเพราะเซสชั่น 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()ด้วยตนเอง


2

ตามเอกสารนั่นคือทั้งหมดที่คุณควรทำ

ซึ่งหมายความว่ามีข้อผิดพลาดหรือหน้าของคุณกำลังถูกแคชสำหรับผู้ใช้แบบไม่ใช้งานเพื่อไม่ให้มีการอ่านข้อมูลเซสชัน ฉันจะตรวจสอบการตั้งค่าแคชของคุณในครั้งแรก


ขอบคุณ บางทีนี่อาจเป็นข้อผิดพลาด แต่จนกระทั่งฉันตัดสินใจที่จะใช้มันsession_api
vitaly.batonov

@ vitaly.batonov คุณสามารถอธิบายเพิ่มเติมเกี่ยวกับวิธีที่คุณใช้ session_api เพื่อแก้ไขปัญหาของคุณได้อย่างไร
lathomas64

2

บางครั้ง Drupal 7 ไม่เริ่มเซสชันโดยอัตโนมัติสำหรับผู้ใช้ที่ไม่ระบุชื่อ หากต้องการใช้เซสชันสำหรับเซสชันคุณอาจต้องบังคับให้เซสชันเริ่มต้นด้วยdrupal_session_startเพื่อให้สามารถใช้งาน$_SESSIONได้


1
มีวิธีบอก Drupal หรือไม่เริ่มเซสชันสำหรับผู้ใช้ที่ไม่ระบุชื่อเสมอหรือไม่

1

หลังจากคุณบันทึกข้อมูลโดยทำตาม:

$_SESSION['xxx'] = serialize($data);

ต้องการฟังก์ชั่นอื่น:

drupal_session_start();

เนื่องจากตารางเซสชั่นต้องการบันทึกที่มี id = 0 คุณสามารถแทรกบันทึกด้วยตนเองด้วย id = 0


0

สร้างผู้ใช้ที่มี uid = 0 ในตารางผู้ใช้เนื่องจาก drupal ใช้ uid นั้นเสมอสำหรับผู้ใช้ที่ไม่ระบุชื่อ

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