我已将用户身份验证超时设置超出默认值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
,这可能会有所作为吗?
答案 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 ;
}
`