タイトルが示唆しているように、Drupal 8.でセッションを作成してアクセスするこれらの2つの方法について少し混乱しています。どちらをもう一方に使用するかはよくわかりません。誰かが私を正しい方向に向けますか?
Drupalの更新後に問題が始まりました。最初はこの方法を使用して、モジュールの匿名ユーザーのセッションを開始していました。
$request = \Drupal::request();
$this->session = $request->getSession();
$session = $this->session->get('mymodule');
更新後、上記のコードは匿名ユーザーのセッションを作成せず、それを機能させる唯一の方法は次のコード部分でした:
$tempstore = \Drupal::service('user.private_tempstore')->get('mymodule_name');
$tempstore->set('my_variable_name', ['test var' => 'this is my value']);
echo '<pre>';
print_r($tempstore->get('my_variable_name'));
echo '</pre>';
ですから、なんとか機能させることができたとしても、なぜそのように機能したのかはよくわかりません。
主な違いは、セッションデータはデータベーステーブルsessions
に格納され、PrivateTempStoreはkey_value_expire
に格納されることです。セッションデータはメモリにプリロードされ、プライベートテンプストアデータは要求された場合のみです。セッションデータは、数メガバイトを超えない少量のデータ用であり、不要になったときにメモリに保持したくない大きなデータチャンク用のプライベート一時ストアです。
あなたが投稿したものはセッションを開始するのではなく、値を取得します。セッションを開始するには、最初に値を設定する必要があります。