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?

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.


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.


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.


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.


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.