Późne odpowiadanie, ale warto wspomnieć, że możesz korzystać z prywatnej przechowalni danych dla anonimowych użytkowników, o ile będzie ona mieć dostęp do aktywnej sesji. Aby to zrobić, musisz wstrzyknąć swojej klasie usługi dla magazynu tymczasowego, sesji i bieżącego użytkownika, takie jak:
public function __construct(PrivateTempStoreFactory $temp_store_factory, SessionManagerInterface $session_manager, AccountInterface $current_user) {
$this->tempStoreFactory = $temp_store_factory;
$this->sessionManager = $session_manager;
$this->currentUser = $current_user;
$this->store = $this->tempStoreFactory->get('myclass.storename');
}
public static function create(ContainerInterface $container) {
return new static(
$container->get('user.private_tempstore'),
$container->get('session_manager'),
$container->get('current_user')
);
}
Musisz tylko upewnić się, że uruchamiasz menedżera sesji, jeśli użytkownik jest anonimowy, zanim będziesz musiał umieścić cokolwiek w magazynie tymczasowym:
if ($this->currentUser->isAnonymous() && !isset($_SESSION['session_started'])) {
$_SESSION['session_started'] = true;
$this->sessionManager->start();
}
Takie podejście może być preferowane, ponieważ oznacza, że możesz użyć jednego systemu do tymczasowego przechowywania, niezależnie od tego, czy użytkownik jest zalogowany.
(Moje przykłady kodu są mniej więcej dosłownie z tego doskonałego samouczka na temat budowania formularzy wieloetapowych ).