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?

vitaly.batonov
sumber

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.

Yusef
sumber
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.

Jeremy French
sumber
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.

Mołot
sumber
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.

Tony Mao
sumber
0

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

sqzaman
sumber