W moim ostatnim projekcie dla Drupal 6 zapisałem dane przy użyciu kodu podobnego do następującego:
$_SESSION['xxx'] = serialize($data);
W Drupal 7 to nie działa.
Jak zapisać dane sesji dla anonimowych użytkowników w Drupal 7?
Ponieważ sesja zapisu drupal z kluczem oznacza, że powinieneś zrobić coś takiego
$_SESSION['yourkey']['xxx'] = serialize($data);
Możesz tego spróbować.
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];
}
Aby zapisać zmienną w sesji:
lists_session("xxx", serialize($data));
Aby odzyskać wartość, użyj:
$myVar = lists_session("xxx");
a także, jak wspomina MOLOT, czasami sesja nie była obserwowana dla anonimowych użytkowników, wtedy należy drupal_session_start()
ręcznie.
Według dokumentów to wszystko, co powinieneś zrobić.
Co oznacza, że wystąpił błąd lub strony są buforowane dla użytkowników anon, więc dane sesji nie są odczytywane. Najpierw sprawdziłbym twoje ustawienia buforowania.
Drupal 7 czasami nie uruchamia automatycznie sesji dla anonimowych użytkowników. Aby użyć dla nich sesji, może być konieczne wymuszenie sesji rozpoczynającej się od drupal_session_start, aby móc z niej korzystać
$_SESSION
.źródło
Po zapisaniu danych wykonaj następujące czynności:
Potrzebujesz innej funkcji:
Ponieważ tabela sesji potrzebuje rekordu o id = 0, możesz ręcznie wstawić rekord o id = 0.
źródło
utwórz użytkownika o identyfikatorze uid = 0 w tabeli użytkowników, ponieważ drupal zawsze używa tego identyfikatora użytkownika dla anonimowych użytkowników
źródło