我正在使用Symfony 2.3.1(这个问题也出现在2.2中)和session.handler.pdo,但是当我添加一个flash包消息时:
$this->get('session')->getFlashBag()->add(
'success', "Your message has been sent."
);
return $this->redirect($this->generateUrl('home'));
重定向后主页上没有显示,直到我按下刷新,然后显示。因此它会显示2个请求。如果我将会话存储更改回本机,则问题就消失了。任何想法为什么会发生这种情况?
我使用以下内容在Twig中打印消息
{% for flashMessage in app.session.flashbag.get('success') %}
{{flashMessage}}
{% endfor %}
我的服务与以下文档相同:
services:
pdo:
class: PDO
arguments:
dsn: "mysql:dbname=%database_name%"
user: %database_user%
password: %database_password%
calls:
- [setAttribute, [3, 2]] # \PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION
session.handler.pdo:
class: Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler
arguments: ["@pdo", %pdo.db_options%]
答案 0 :(得分:1)
我在memcache会话中有类似的东西。可能存在竞争条件。
当写入flash和重定向序列时可以:
-client redirects | -DB saves record
-client accesses |
the redirected URL |
| -DB completes saving
-client refreshes |
在我的情况下,解决方法是在AppKernel.php
下面添加。
public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true)
{
$response = parent::handle($request, $type, $catch);
if ($type == HttpKernelInterface::MASTER_REQUEST) {
if ($this->getContainer()->get('session')->isStarted()) {
//explicitly save session before returning $response
$this->getContainer()->get('session')->save();
}
}
return $response;
}
答案 1 :(得分:1)
使用swiftmailer时遇到同样的问题,我得到了一个针对此问题的快速修复程序。
如果您在此操作中使用SwiftMailer,请尝试删除配置文件中的假脱机行。
这不是修复它的最佳方法,但它确实有效。
仍然在这里工作并思考更好的解决方案......
答案 2 :(得分:0)
尝试使用get('session')
更改getSession()
。希望它能起作用。