web-dev-qa-db-ja.com

\ Drupal :: request()-> getSession()と\ Drupal :: service( 'user.private_tempstore')の違いは何ですか?

タイトルが示唆しているように、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>';

ですから、なんとか機能させることができたとしても、なぜそのように機能したのかはよくわかりません。

4
user82025

主な違いは、セッションデータはデータベーステーブルsessionsに格納され、PrivateTempStoreはkey_value_expireに格納されることです。セッションデータはメモリにプリロードされ、プライベートテンプストアデータは要求された場合のみです。セッションデータは、数メガバイトを超えない少量のデータ用であり、不要になったときにメモリに保持したくない大きなデータチャンク用のプライベート一時ストアです。

あなたが投稿したものはセッションを開始するのではなく、値を取得します。セッションを開始するには、最初に値を設定する必要があります。

5
4k4