如何在Symfony中检测会话超时

时间:2009-12-04 07:43:41

标签: php session symfony1 timeout

我目前正在使用PHP框架Symfony开发一个项目。 我已经配置了安全页面,为会话超时定义了30分钟,并设置了如果未经身份验证的用户尝试访问安全页面,用户应该重定向的页面。

我已经注意到,如果用户在用户会话过期后尝试访问受保护的页面,则用户也会重定向到该用户。 在这种情况下,我想显示一条消息,主要是说“您的会话已过期。请重新连接。”

我怎么能实现这个目标?

2 个答案:

答案 0 :(得分:2)

您可以在每次成功验证时设置Cookie。然后,如果会话为空,但cookie存在,则说“会话已过期”。

另一种更丑陋的方式,即使禁用了cookie也可以使用:始终将会话ID添加到URL。然后,再次,如果它存在于URL中,但会话为空,则我们处于到期状态。

答案 1 :(得分:1)

检查myUser-> timedout会更容易。

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

Symfony 1.4没有这种方法,但您可以创建它:

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

正确填充属性timedout。

然后在模板中检查其值:

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