1

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

工厂.yml

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

user:
  class: myUser
  param:
    timeout: 604800

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

4

1 回答 1

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;
    }
}

`

并在您的用户提供程序服务方法“loadUserByUsername($username)”的末尾添加:

`

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

`

于 2014-09-25T08:43:43.887 回答