我需要一种方法来存储匿名用户的临时数据。
显然这是不可能的:
\Drupal::service('user.private_tempstore')
除非你为会话管理和东西编写一个自定义构造函数,这对我来说有点牵强吗?
我尝试使用
\Drupal::service('user.shared_tempstore')
但是这会为所有匿名用户保存临时数据。所以它没有链接到单个用户。
使用原始$ _SESSION ['数据']工作正常,但我不确定我是否应该在Drupal中这样做以及它是多么安全/不安全此?
答案 0 :(得分:2)
我没有回答您的具体问题(关于pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
),因为我已成功使用:
$_SESSION
从程序代码(即钩子,主题)中没有问题。
注意必须将这个私有临时存储分配给一个模块(因为缺少更好的说法)这就是这行的目的
$session = \Drupal::service('user.private_tempstore')->get('your_module');
$session->set('whatever', $whatever);
获得私人临时存储器后,您现在可以设置并获取会话值:
$session = \Drupal::service('user.private_tempstore')->get('your_module')
修改
抱歉,您解释正确。我没有100%获得关键部分;)
您始终可以从请求中访问Session对象。
$session->get('whatever');
$session->set('whatever', $whatever);
答案 1 :(得分:2)
Sessions(Drupal 8)通过SessionInterface接口的简单Session实现使用。 See Complete Tutorial of Sessions (Drupal 8).
示例:
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>';
}
答案 2 :(得分:0)
我现在已经使用普通的PHP $ _SESSION变量了一段时间。 对它们进行了一些研究,它们应该是完全安全的。 他们在我使用它们的任何地方都能正常工作,并且它们已经正常工作了一段时间。
不要认为在Drupal 8中使用它们有任何问题。