2017-01-19 8 views
2

匿名ユーザーのための一時的なデータを格納する方法が必要です。

どうやらこれはでは不可能です:あなたは私にはちょっとこじつけ思われる、セッション管理とスタッフのためのカスタムコンストラクタを記述しない限り

\Drupal::service('user.private_tempstore') 

私は

\Drupal::service('user.shared_tempstore') 

を使用してみました。しかし、それはすべての匿名ユーザー用の一時データが保存されます。したがって、1人のユーザーにはリンクされていません。

raw $ _SESSION ['data']を使用するとうまくいきますが、Drupalでこれを行うことになっていて、どうすれば安全/安全でないのか分かりません。

答えて

0

。 それらについていくつかの研究を行いましたが、使用するのは完全に安全でなければなりません。 彼らは私がそれらを使用してどこでも正常に動作しており、しばらくの間正しく動作しています。

は、匿名ユーザーに対しては機能しません

3

私は正常に使用しているので、私は($_SESSIONについて)あなたの特定の質問に答えるわけではない:

$session = \Drupal::service('user.private_tempstore')->get('your_module'); 
$session->set('whatever', $whatever); 

手続き型コード(すなわちフック、テーマ)の中から問題なく。あなたはプライベートtempostoreあなたを取得した後、このライン

$session = \Drupal::service('user.private_tempstore')->get('your_module') 

の目的で、このプライベートtempstoreは(これを言ってのより良い方法がないために)モジュールに割り当てなければならないこと

ご注意ください今設定とセッション値を取得することができます。

$session->get('whatever'); 
$session->set('whatever', $whatever); 

EDIT

申し訳ありませんが、あなたは正確に説明しました。私は重要な部分を100%得ることはできませんでした;)

リクエストからいつでもセッションオブジェクトにアクセスできます。

+1

のDrupal 8でそれらを使用して任意の問題がないと思う、おそらく私の最初の質問ではそれがより明白行ったはずです。 –

+0

@ PascalClaesあなたは正しく説明しました。私は重要な部分を取得していない:)私は答えを編集しました。 –

+0

これは、一意の匿名ビジターごとに固有のセッションを作成しますか? –

2

セッション(Drupal 8)は、SessionInterfaceインターフェイスの単純なセッション実装を通じて使用されます。 See Complete Tutorial of Sessions (Drupal 8).

例:私は今、しばらくの間、プレーンなPHPの$ _SESSION変数を使用してきた

use Symfony\Component\HttpFoundation\Session\Session; 

$session = new Session(); 
$session->start(); 

// set and get session attributes 
$session->set('name', 'Yash'); 
$session->get('name'); 

// set flash messages 
$session->getFlashBag()->add('notice', 'Profile updated'); 

// retrieve messages 
foreach ($session->getFlashBag()->get('notice', array()) as $message) { 
    echo '<div class="flash-notice">'.$message.'</div>'; 
} 
+0

答えを受け入れる前にこれをテストする必要がありますが、非常に便利です! –

+0

うん、しかし、より多くのテストが必要に見えます。このようなエラーを生成します。 RuntimeException:セッションの開始に失敗しました。既にPHPによって開始されています。 Symfony \ Component \ HttpFoundation \ Session \ Storage \ NativeSessionStorage-> start()(/vendor/symfony/http-foundation/Session/Storage/NativeSessionStorage.phpの131行目)にあります。 – user25794

関連する問題