Як зберегти дані сеансу для анонімних користувачів?


20

У своєму останньому проекті для Drupal 6 я зберігав дані, використовуючи код, аналогічний наступному:

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

У Drupal 7 це не працює.

Як слід зберігати дані сеансу для анонімних користувачів у Drupal 7?

Відповіді:


4

Це тому, що drupal save session з ключем, це означає, що ви повинні зробити щось на кшталт

  $_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 для анонімних користувачів

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.