【问题标题】:How to detect session timeout in Symfony如何在 Symfony 中检测会话超时
【发布时间】:2010-12-23 03:50:13
【问题描述】:
我目前正在开发一个使用 PHP 框架 Symfony 的项目。
我已经配置了安全页面,为会话超时定义了 30 分钟,并设置了如果未经身份验证的用户尝试访问安全页面时用户应该重定向的页面。
我已经指出,如果用户在会话过期后尝试访问受保护的页面,用户也会被重定向到那里。
在这种情况下,我想显示一条消息,基本上是说“您的会话已过期。请重新连接。”
我怎样才能做到这一点?
【问题讨论】:
标签:
php
session
symfony1
timeout
【解决方案1】:
您可以在每次成功的身份验证时设置一个 cookie。然后,如果会话为空,但 cookie 存在,则您说“会话已过期”。
另一种更丑陋的方法,即使在禁用 cookie 的情况下也可以使用:始终将会话 ID 添加到 URL。然后,再次,如果它存在于 URL 中,但会话为空,则我们处于过期情况。
【解决方案2】:
检查 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 ?>