В моем последнем проекте для Drupal 6 я сохранил данные, используя код, подобный следующему:
$_SESSION['xxx'] = serialize($data);
В Drupal 7 это не работает.
Как мне сохранить данные сеанса для анонимных пользователей в Drupal 7?
Это потому, что 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()
вручную.
Согласно документам , это все, что вам нужно сделать.
Это означает, что существует либо ошибка, либо ваши страницы кэшируются для пользователей, поэтому данные сеанса не читаются. Я бы в первую очередь проверил ваши настройки кеширования.
Drupal 7 иногда не запускает сессии автоматически для анонимных пользователей. Для того, чтобы использовать сессии для них, возможно , потребуется сила сессии началась с drupal_session_start , чтобы иметь возможность использовать
$_SESSION
.источник
После сохранения данных выполните следующие действия:
Нужна другая функция:
Поскольку для таблицы Session требуется запись с id = 0, вы можете вручную вставить запись с id = 0.
источник
создайте пользователя с uid = 0 в таблице users, потому что drupal всегда использует этот uid для анонимных пользователей
источник