Respuesta tardía, pero vale la pena mencionar que puede usar tempstore privado para usuarios anónimos, siempre que tempstore tenga acceso a una sesión activa. Para hacerlo, debe inyectar a su clase servicios para la tienda temporal, la sesión y el usuario actual, de esta manera:
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')
);
}
Luego, solo debe asegurarse de iniciar el administrador de sesión si el usuario es anónimo, antes de poner algo en el almacén temporal:
if ($this->currentUser->isAnonymous() && !isset($_SESSION['session_started'])) {
$_SESSION['session_started'] = true;
$this->sessionManager->start();
}
Es posible que este enfoque sea preferible porque significa que puede usar un solo sistema para el almacenamiento temporal, independientemente de si un usuario ha iniciado sesión.
(Mis ejemplos de código se extraen más o menos textualmente de este excelente tutorial sobre cómo crear formularios de varios pasos ).