我想在Symfony2 sesion被销毁之前扩展sesion_liftime。
我向用户显示他将在几秒钟后退出,并且当他/她确认扩展该sesion时,我向控制器发送ajax请求,该控制器应该扩展该sesion。但问题是请求无效。
我尝试了几种不同的解决方案,但没有一种解决方案。
<script type="text/javascript">
var timeoutID;
function delayedAlert() {
timeoutID = window.setTimeout(slowAlert, 15000);
}
function slowAlert() {
setTimeout(logout, 5500)
var r=confirm("You will be logout in 5 seconds!");
if (r==true)
{
$.ajax({
url: 'http://localhost/interactivo/web/app_dev.php/check',
xhrFields: {
withCredentials: true
}
});
alert("You wont be logout");
}
}
function logout() {alert("You are logout");};
delayedAlert();
</script>
/**
* @Route("/check")
*/
public function indexAction()
{
// FIRST ATTEMPT
// $value = 'something from somewhere';
//
// setcookie("TestCookie", $value);
// setcookie("TestCookie", $value, time()+3600); /* expire in 1 hour */
// setcookie("TestCookie", $value, time()+3600, "/~rasmus/", "example.com", 1);
// SECOND ATTEMPT
// header('Content-type: text/html; charset=utf-8');
// echo 'TEST';
// THIRD ATTEMPT
$session = $this->container->get('session');
$lastUsed = new \DateTime();
$lastUsed->setTimestamp($session->getMetadataBag()->getLastUsed());
return $this->render('GLHomeBundle:Default:sesion.html.twig', array( 'entities'=> $lastUsed));
}
我做错了什么?
答案 0 :(得分:0)
我认为这不是一个好的解决方案(如果有效),但symfony中会话的cookie称为“PHPSESSID”。尝试将此cookie的生命周期设置为所需的时间?我使用这种方法将我的会话通过Drupal和Varnish传递给客户端,所以我认为它可以延长会话的生命周期。
此致 Peekmo
答案 1 :(得分:0)
我终于找到了解决方案。我使用了来自site的Session KeepAlive Listener。 我通过AJAX这样调用控制器:
function slowAlert() {
setTimeout(logout, 40000)
var r=confirm("You will be logout in 20s!");
if (r==true)
{
$.ajax({
url: "{{ url('_demo_hello') }}",
xhrFields: {
withCredentials: true
}
});
alert("You wont be logout");
}
}
控制器非常简单:D
/**
* @Route("/check", name="_demo_hello")
*/
public function checkAction()
{
$response = new Response();
return $response;
}