Terlambat menjawab, tetapi perlu disebutkan bahwa Anda dapat menggunakan tempstore pribadi untuk pengguna anonim, selama tempstore memiliki akses ke sesi aktif. Untuk melakukannya, Anda perlu menyuntikkan kelas Anda dengan layanan untuk temp store, sesi, dan pengguna saat ini, seperti:
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')
);
}
Maka Anda hanya perlu memastikan Anda memulai manajer sesi jika pengguna anonim, sebelum Anda perlu memasukkan apa pun di temp store:
if ($this->currentUser->isAnonymous() && !isset($_SESSION['session_started'])) {
$_SESSION['session_started'] = true;
$this->sessionManager->start();
}
Anda mungkin menemukan pendekatan ini lebih disukai karena itu berarti Anda dapat menggunakan sistem tunggal untuk penyimpanan sementara, terlepas dari apakah pengguna masuk atau tidak.
(Contoh kode saya terangkat lebih atau kurang kata demi kata dari tutorial yang sangat baik tentang membangun formulir multi-langkah ini .)