Bagaimana cara menyimpan data sesi untuk pengguna anonim?


20

Dalam proyek terakhir saya untuk Drupal 6, saya memang menyimpan data menggunakan kode yang mirip dengan yang berikut:

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

Di Drupal 7, itu tidak berhasil.

Bagaimana cara saya menyimpan data sesi untuk pengguna anonim, di Drupal 7?

Jawaban:


4

Itu karena drupal menyimpan sesi dengan kunci, ini berarti Anda harus melakukan sesuatu seperti

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

Anda bisa mencoba ini.

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];
}

Jadi, untuk menyimpan variabel di Sesi:

lists_session("xxx", serialize($data));

Dan untuk mengambil nilainya, cukup gunakan:

$myVar = lists_session("xxx");

dan juga MOLOT menyebutkan kadang-kadang sesi tidak dikilaukan untuk pengguna anonim maka Anda harus drupal_session_start()secara manual.


2

Menurut dokumen , hanya itu yang harus Anda lakukan.

Yang berarti ada bug, atau halaman Anda sedang di-cache untuk pengguna lain sehingga data sesi tidak dibaca. Saya akan memeriksa pengaturan caching Anda pada contoh pertama.


Terima kasih. Mungkin ini bug. tetapi sampai saya memutuskan untuk menggunakannya session_api
vitaly.batonov

@ vitaly.batonov dapatkah Anda menjelaskan bagaimana Anda menggunakan session_api untuk menyelesaikan masalah Anda?
lathomas64

2

Drupal 7 terkadang tidak secara otomatis memulai sesi untuk pengguna anonim. Untuk menggunakan sesi untuk mereka, Anda mungkin perlu memaksa sesi dimulai dengan drupal_session_start untuk dapat digunakan $_SESSION.


1
Apakah ada cara untuk memberi tahu Drupal, SELALU memulai sesi untuk pengguna anonim?

1

Setelah Anda menyimpan data dengan mengikuti:

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

Perlu fungsi lain:

drupal_session_start();

Karena tabel Sesi membutuhkan catatan dengan id = 0, Anda dapat secara manual memasukkan catatan dengan id = 0.


0

buat pengguna dengan uid = 0 di tabel pengguna karena drupal selalu menggunakan uid untuk pengguna anonim

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.