Ajax 延长Symfony2中的会话生存期

Ajax 延长Symfony2中的会话生存期,ajax,session,symfony,Ajax,Session,Symfony,我试图在Symfony2 sesion被销毁之前延长sesion_寿命 我向用户显示他将在几秒钟内注销,当他/她确认扩展sesion时,我向控制器发送ajax请求,控制器应扩展sesion。但问题是这个请求不起作用 我尝试了几种不同的解决方案,但都不奏效 <script type="text/javascript"> var timeoutID; function delayedAlert() { tim

我试图在Symfony2 sesion被销毁之前延长sesion_寿命

我向用户显示他将在几秒钟内注销,当他/她确认扩展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));
    }

var-timeoutID;
函数delayedAlert(){
timeoutID=window.setTimeout(slowAlert,15000);
}
函数slowAlert(){
设置超时(注销,5500)
var r=确认(“您将在5秒钟内注销!”);
如果(r==true)
{
$.ajax({
网址:'http://localhost/interactivo/web/app_dev.php/check',
xhrFields:{
证书:正确
}
});
提醒(“您不会注销”);
}
}
函数logout(){alert(“您正在注销”);};
delayedAlert();
/**
*@Route(“/check”)
*/
公共函数索引()
{
//第一次尝试
//$value='某处的某物';
//
//setcookie(“TestCookie”,$value);
//setcookie(“TestCookie”,$value,time()+3600);/*1小时后过期*/
//setcookie(“TestCookie”,“$value,time()+3600”,“/~rasmus/”,“example.com”,1);
//第二次尝试
//标题('Content-type:text/html;charset=utf-8');
//回声“测试”;
//第三次尝试
$session=$this->container->get('session');
$lastUsed=new\DateTime();
$lastUsed->setTimestamp($session->getMetadataBag()->getLastUsed());
返回$this->render('GLHomeBundle:Default:sesion.html.twig',数组('entities'=>$lastUsed));
}

我做错了什么?

我认为这不是一个好的解决方案(如果可行的话),但是symfony中的会话cookie被称为“PHPSESSID”。尝试将此cookie的生存时间设置为所需的时间?我使用这个方法将会话accross Drupal和Varnish传递给客户机,所以我认为它可以延长会话的生命周期

问候,,
我终于找到了解决这个问题的办法。我从这里使用了SessionKeepAlivelListener。 我通过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;
}

问题是这个ajax请求没有调用控制器,我已经发现,如果我只使用会话,它会自动更改属性od lastModified,因此iw将足以扩展会话。但是我怎样才能调用这个索引呢?url:'/check',这确保您可以使用url中的路由调用控制器,如果它不起作用,您的问题就出在其他地方