2009-12-04 70 views
0

我目前正在使用PHP框架Symfony開展一個項目。 我配置了安全頁面,爲會話超時定義30分鐘,並設置用戶在未經身份驗證的用戶嘗試訪問受保護頁面時應該重定向的頁面。如何在Symfony中檢測會話超時

我說過,如果用戶在會話過期後嘗試訪問受保護的頁面,用戶也會被重定向到那裏。 在這種情況下,我想顯示一條消息,基本上說「您的會話已過期,請重新連接。」

我怎麼能做到這一點?

回答

2

您可以在每次成功認證時設置一個cookie。然後,如果會話爲空,但Cookie存在,則表示「會話已過期」。

另一種更醜陋的方式,即使在禁用cookies的情況下也能正常工作:始終將會話ID添加到URL中。然後,再次,如果它存在於URL中,但會話是空的,那麼我們處於到期狀態。

+0

我寧願來實現它作爲一個過濾器 – develop7

1

更容易檢查myUser-> timedout。

http://trac.symfony-project.org/changeset/1722

的Symfony 1.4沒有這種方法,但你可以創建它:

class myUser extends sfBasicSecurityUser 
{ 
    // ... 
    public function getTimedOut() 
    { 
     return $this->timedout; 
    } 
    // ... 
} 

屬性已逾時填寫正確。

然後檢查其是否在你的模板值:

<?php if($sf_user->getTimedOut()) : ?> 
    <div class="error">Session timeout...</div> 
<?php endif ?>