用户身份验证在symfony 1.4中的到期配置之前超时

时间:2012-12-17 11:29:05

标签: php session authentication symfony-1.4

我已将用户身份验证超时设置超出默认值30分钟,但我仍然发现用户正在超时。这会产生csrf保护表单的问题。

factories.yml文件

storage:
  class: sfSessionStorage
  param:
    session_cookie_lifetime: 604800
    session_cookie_httponly: true

user:
  class: myUser
  param:
    timeout: 604800

gc.session_timeout设置为相同的值 它在我的本地工作正常,只有在生产上才有问题。关于什么导致早期超时的任何想法?如果我改为sfPDOSessionStorage,这可能会有所作为吗?

1 个答案:

答案 0 :(得分:0)

您可以使用新属性authenticationExpiration自定义您的User类:

`
class CustomUser extends User
{
    protected $authenticationExpiration;

    public function setAuthenticationExpiration( $timestamp)
    {
        $this->authenticationExpiration = $timestamp;
        return $this;
    }

    public function getAuthenticationExpiration()
    {
        return $this->authenticationExpiration;
    }
}`

您可以自定义UserProvider方法" refereshUser"像这样:

`

public function refreshUser(UserInterface $user) {
    if (!$this->supportsClass(get_class($user))) {
       throw new UnsupportedUserException('usuported class');
    }

    // durée
    if( time() > $user->getAuthenticationExpiration() ){
        throw new AutoLoginTokenNotFoundException('Login failed');
    }
    else {
        return $user;
    }
}

`

并在您的User Provider服务方法结束时添加" loadUserByUsername($ username)" :

`

public function loadUserByUsername($username)
{
     // ...
     $user = new CustomUser($username, $data); 
     $user->setAuthenticationExpiration( time() + 3600);
     return $user ;
}

`