Jak zapisać dane sesji dla anonimowych użytkowników?

20

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?

vitaly.batonov
źródło

Odpowiedzi:

4

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.

Yusef
źródło
2

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.

Jeremy French
źródło
dzięki. Być może jest to błąd. ale dopóki nie zdecydowałem się go użyć session_api
vitaly.batonov
@ vitaly.batonov czy możesz wyjaśnić, w jaki sposób wykorzystałeś session_api do rozwiązania problemu?
lathomas64
2

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.

Mołot
źródło
1
Czy istnieje sposób, aby powiedzieć Drupalowi, ZAWSZE rozpocząć sesję dla anonimowych użytkowników?
1

Po zapisaniu danych wykonaj następujące czynności:

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

Potrzebujesz innej funkcji:

drupal_session_start();

Ponieważ tabela sesji potrzebuje rekordu o id = 0, możesz ręcznie wstawić rekord o id = 0.

Tony Mao
źródło
0

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

sqzaman
źródło