Trả lời muộn, nhưng điều đáng nói là bạn có thể sử dụng tempstore riêng cho người dùng ẩn danh, miễn là tempstore có quyền truy cập vào một phiên hoạt động. Để làm như vậy, bạn cần cung cấp cho lớp của mình các dịch vụ cho cửa hàng tạm thời, phiên và người dùng hiện tại, như vậy:
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')
);
}
Sau đó, bạn chỉ cần đảm bảo bạn khởi động trình quản lý phiên nếu người dùng ẩn danh, trước khi bạn cần đặt bất cứ thứ gì vào cửa hàng tạm thời:
if ($this->currentUser->isAnonymous() && !isset($_SESSION['session_started'])) {
$_SESSION['session_started'] = true;
$this->sessionManager->start();
}
Bạn có thể thấy cách tiếp cận này thích hợp hơn vì nó có nghĩa là bạn có thể sử dụng một hệ thống duy nhất để lưu trữ tạm thời, bất kể người dùng có đăng nhập hay không.
(Các ví dụ mã của tôi được gỡ bỏ nhiều hơn hoặc ít hơn nguyên văn từ hướng dẫn tuyệt vời này về xây dựng các biểu mẫu nhiều bước .)