【发布时间】:2016-04-06 07:45:41
【问题描述】:
目前我正在尝试在操作开始时关闭会话,因为这是一个 AJAX 操作,根本不需要任何会话。
protected function _closeSession(Request $request)
{
if($request->hasSession()){
$session = $request->getSession();
$session->save();
}
}
public function listAction(Request $request, $mode, $id)
{
$data = [];
$this->_closeSession($request);
//perform long polling
//return json response
$response = new Response(json_encode($data));
$response->headers->set('Content-Type', 'application/json');
return $response;
}
但我从 NativeSessionStorage 收到此错误:无法启动会话,因为标头已发送。
更新:
问题是我有 2 个单独的 ajax 调用,一个用于将 cmets 添加到站点,另一个长时间运行的脚本通过称为长轮询的技巧在页面上显示这些 cmets。但是有一个问题,当第二个脚本阻止第一个脚本时,因为默认情况下两者都使用会话。此处描述了此问题 - Long running background PHP script blocks other PHP pages until it is finished。我找到了手动调用 session_write_close 而不是 _closeSession 中的 $session->save() 的解决方案。但是还有其他更 Symfony 风格的方法吗?
【问题讨论】:
-
您能否向我们解释一下终止会话背后的想法?为什么
AJAX这么特别?