it-swarm-id.com

Bagaimana cara menyimpan data sesi untuk pengguna anonim?

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, tidak berfungsi.

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

20
vitaly.batonov

Itu karena drupal simpan 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.

4
Yusef

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 menggunakan $_SESSION.

2
Mołot

Menurut dokumen , hanya itu yang perlu 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.

2
Jeremy French

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.

1
Tony Mao

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

0
sqzaman