У своєму останньому проекті для Drupal 6 я зберігав дані, використовуючи код, аналогічний наступному:
$_SESSION['xxx'] = serialize($data);
У Drupal 7 це не працює.
Як слід зберігати дані сеансу для анонімних користувачів у Drupal 7?
У своєму останньому проекті для Drupal 6 я зберігав дані, використовуючи код, аналогічний наступному:
$_SESSION['xxx'] = serialize($data);
У Drupal 7 це не працює.
Як слід зберігати дані сеансу для анонімних користувачів у Drupal 7?
Відповіді:
Це тому, що 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()
вручну.
Згідно з документами , це все, що вам потрібно зробити.
Що означає, що або помилка, або ваші сторінки кешуються для користувачів, що не користуються, тому дані сеансу не читаються. Я б перевірив ваші налаштування кешування в першу чергу.
Drupal 7 іноді автоматично не починає сеанси для анонімних користувачів. Щоб використовувати для них сеанси, можливо, вам доведеться змусити сеанс, розпочатий з drupal_session_start, щоб мати можливість використовувати $_SESSION
.