我遇到与Symfony2请求相关的问题。当我做一个请求时,一个进程,从MongoDB加载数据,启动。如果我在浏览器中打开一个新选项卡,并且我对应用程序(也是不同的路由)做了任何请求,虽然我已关闭旧选项卡,空白页面上传,等待响应。
会话管理是原生的。我想新的请求会杀死已经运行的所有进程。不是会话并发的问题,因为我想要一个' last will win'做法。我认为问题是针对HttpKernel的请求处理,但是我无法解决它。你能救我吗?
这是控制器动作:
/**
* @Security("is_granted('IS_AUTHENTICATED_FULLY')")
*/
public function searchAction(Request $request, $page = null)
{
//controlla la lista di autorizzazioni: l'utente può eseguire l'action solo se autorizzato per quell'attributo
if ($this->authlist != null) {
$authorized = false;
foreach ($this->authlist as $auth) {
if ($this->security_auth_checker->isGranted($auth, new VoterHelper())) {
$authorized = true;
break;
}
}
if (!$authorized) {
throw new AccessDeniedException("Accesso negato! L'utente non può accedere a questa funzionalità !");
}
}
//recupera i dati
$session = $request->getSession();
$form = $this->formFactory->create($this->formType);
$sessionNamePage = $this->formType->getName().'_page';
if (($page) && ($session->get($this->formType->getName()))) {
$form_data = $session->get($this->formType->getName());
$form->setData($form_data);
$session->set($sessionNamePage, $page);
} else {
$session->remove($sessionNamePage);
}
$form->handleRequest($request);
if ($form->isValid()) {
$form_data = $form->getData();
}
//passa alla business logic i parametri della form, i dati di paginazione e offset ed eventualmente la queryString del metodo get
if (isset($form_data)) {
$queryString = $request->getQueryString();
// $form_data['page'] = $page;
// $form_data['offset'] = self::OFFSET;
$data = array();
$data['form_data'] = $form_data;
$data['page'] = $page;
$data['offset'] = self::OFFSET;
$data['query_string'] = $queryString;
$results = $this->businessLogic->execute($data);
if (is_array($results) && isset($results['reportsCounts'])) {
$form_data['report_count'] = $results['reportsCounts'];
$reports = $results['reports'];
} else {
$reports = $results;
}
}
if ($form->isValid()) {
// $form_data = $form->getData();
$session->set($this->formType->getName(), $form_data);
$sessionNamePage = $this->formType->getName().'_page';
if (!$session->get($sessionNamePage)) {
$session->set($sessionNamePage, 1);
}
}
return $this->templating->renderResponse($this->templatePath, array(
'report_count' => (isset($form_data['report_count'])) ? $form_data['report_count'] : null,
'reports' => (isset($reports)) ? $reports : null,
'page' => $page,
'offset' => self::OFFSET,
'form' => $form->createView(),
));
答案 0 :(得分:0)
我通过调用
解决了这个问题$request->getSession()->save();
任何长期的过程。
通过这种方式,我强迫Symfony解锁会话文件。