【问题标题】:Symfony2 renew Session and store valueSymfony2 更新 Session 并存储价值
【发布时间】:2013-04-01 23:48:15
【问题描述】:

我的用户可以在表单上更改他们的密码。如果此表单有效,我对其进行编码,使用使会话无效

$this->get('security.context')->setToken(null);
$this->getSession()->invalidate();

...将用户刷新到数据库并进行重定向(到相同的 url)。

除此之外,我还有一种机制可以在转发之前在会话中存储一些信息,并在“转发”模板中显示这些数据。

两者都可以单独使用,但不能一起使用:-)

我可以看到,该值已写入(在使会话无效之后)并且我相信 symfony 实例化了一个新会话。

我只是不知道,在那之后会发生什么。也许 symfony 正在做一些“魔术”,因为它在显示重定向的 url 之前“注入”了登录页面。

【问题讨论】:

  • 也许您需要登录才能查看重定向的 URL?我想你需要,因为它是一个编辑用户信息的页面。
  • 是的,我当然必须这样做。我总是重定向到此对话框中的同一页面。更改密码后的唯一区别是,我使会话无效,因此登录页面在工作流程中被“注入”。在这种情况下,我的信息没有显示,文本被写入会话,但会话似乎发生了变化(第二次)。

标签: session symfony login store invalidation


【解决方案1】:

我真的不明白您要做什么,以及为什么要使会话无效,但是您的用户需要登录才能看到重定向的 URL。 您的代码将他注销。

您可以通过这样做来记录用户:

use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;

$authToken = new UsernamePasswordToken($user, null, 'secured_area', array('ROLE_USER'));
$this->get('security.context')->setToken($authToken);

第三个参数是providerKey,第四个是roles数组。

【讨论】:

  • 用户已注销,因为他更改了密码。这导致在控制器中重定向他。重定向时,我使用会话来存储文本(在这种情况下,它是在使旧会话无效后存储的!),这比我在重定向视图上显示的要高。我的问题是,“注入的”登录屏幕不显示文本,因为会话似乎已经改变了再次
  • 哦,好的,我明白了。你为什么不用闪光灯包? symfony.com/doc/master/book/controller.html#flash-messages
猜你喜欢
  • 1970-01-01
  • 2016-11-12
  • 2012-03-31
  • 2011-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-21
相关资源
最近更新 更多