可以在Drupal 8中使用$ _SESSION ['变量']吗?

时间:2017-01-19 11:23:19

标签: session drupal-8

我需要一种方法来存储匿名用户的临时数据。

显然这是不可能的:

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

除非你为会话管理和东西编写一个自定义构造函数,这对我来说有点牵强吗?

我尝试使用

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

但是这会为所有匿名用户保存临时数据。所以它没有链接到单个用户。

使用原始$ _SESSION ['数据']工作正常,但我不确定我是否应该在Drupal中这样做以及它是多么安全/不安全此?

3 个答案:

答案 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中使用它们有任何问题。