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 に答える