2013-07-29 81 views
0

我想在Symfony2會話之前將sesion_liftime延長。在Symfony2中延長會話生存期

我向用戶顯示他將在幾秒鐘內註銷,並且當他/她確認要擴展該會話時,我會向控制器發送一個ajax請求,以便擴展該會話。但問題是請求不起作用。

我嘗試了幾個不同的解決方案,但都沒有工作。

<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

我認爲這不是一個好的解決方案(如果它有效),但symfony中會話的cookie被稱爲「PHPSESSID」。試着將這個cookie的使用時間設置爲所需的時間?我使用這種方法將Drupal和Varnish中的會話傳遞給客戶端,所以我認爲它可以延長會話的生命週期。

問候, Peekmo

+0

的問題是,這個Ajax請求不調用控制器,我已經發現,如果我只會使用會話,它會自動更改lastModified的屬性,所以iw將足以延長會話。但我怎麼能調用這個indexAction? – user2576422

+0

url:'/ check',這是肯定的,你可以通過使用url中的路由來調用你的控制器,如果它不起作用,你的問題在其他地方 – Peekmo

0

我finaly找到此解決方案。我使用了這個site中的SessionKeepAliveListener。 我打電話通過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; 
}