Как сохранить данные сеанса для анонимных пользователей?

20

В моем последнем проекте для Drupal 6 я сохранил данные, используя код, подобный следующему:

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

В Drupal 7 это не работает.

Как мне сохранить данные сеанса для анонимных пользователей в Drupal 7?

vitaly.batonov
источник

Ответы:

4

Это потому, что Drupal сохранить сессию с ключом, это означает, что вы должны сделать что-то вроде

  $_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();

Поскольку для таблицы Session требуется запись с id = 0, вы можете вручную вставить запись с id = 0.

Тони Мао
источник
0

создайте пользователя с uid = 0 в таблице users, потому что drupal всегда использует этот uid для анонимных пользователей

sqzaman
источник