我正在用Laravel 4.1做一个应用程序,当用户登录时,我正在注册一些cookie:
Cookie::queue('adm-chave', $chave, 30);
Cookie::queue('adm-usuario', $usuario->usuario, 30);
Cookie::queue('adm-usuario-id', $usuario->id, 30);
Cookie::queue('adm-usuario-nome', $usuario->nome, 30);
Cookie::queue('adm-usuario-email', $usuario->email, 30);
我做了一个代码来更新每个页面加载的到期时间,如下所示:
Route::filter('logado', function()
{
$chave = Cookie::get('adm-chave');
$usuario = Cookie::get('adm-usuario');
$id_usuario = Cookie::get('adm-usuario-id');
$nome = Cookie::get('adm-usuario-nome');
$email = Cookie::get('adm-usuario-email');
if(empty($chave) || empty($id_usuario)){
$resposta = Redirect::to('/');
$resposta->withCookie(Cookie::forget('adm-chave'));
$resposta->withCookie(Cookie::forget('adm-usuario'));
$resposta->withCookie(Cookie::forget('adm-usuario-id'));
$resposta->withCookie(Cookie::forget('adm-usuario-nome'));
$resposta->withCookie(Cookie::forget('adm-usuario-email'));
return $resposta;
}
Cookie::queue('adm-usuario', $usuario, 30);
Cookie::queue('adm-usuario-id', $id_usuario, 30);
Cookie::queue('adm-usuario-nome', $nome, 30);
Cookie::queue('adm-usuario-email', $email, 30);
});
即使进行了此续订,我的Cookie也会随机过期,并且我的用户会在该块中注销。
我错过了什么?
答案 0 :(得分:0)
首先我们在config / app.php中添加一个选项,如下所示(我将其设置为24小时):
/*
|--------------------------------------------------------------------------
| Session Files Lifetime
|--------------------------------------------------------------------------
|
| Here you may specify the number of minutes after which old sessions in
| storage will be seen as 'garbage' and cleaned up. Garbage collection may
| occur during session start, depending on the lottery. The default is 24.
|
*/
'files_lifetime' => 24*60,
然后我们创建两个文件。在SessionServiceProvider.php中,我们覆盖SessionManager寄存器以使用我们自己的SessionManager:
<?php namespace YourNamespace\Session;
class SessionServiceProvider extends \Illuminate\Session\SessionServiceProvider {
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
$this->setupDefaultDriver();
$this->registerSessionManager();
$this->registerSessionDriver();
}
/**
* Register the session manager instance.
*
* @return void
*/
protected function registerSessionManager()
{
$this->app['session.manager'] = $this->app->share(function($app)
{
return new SessionManager($app);
});
}
}
在SessionManager.php中,我们覆盖getOptions()方法以设置gc_maxlifetime:
<?php namespace YourNamespace\Session;
class SessionManager extends \Illuminate\Session\SessionManager {
/**
* Get the session options.
*
* @return array
*/
protected function getOptions()
{
$config = $this->app['config']['session'];
return array(
'cookie_domain' => $config['domain'], 'cookie_lifetime' => $config['lifetime'] * 60,
'cookie_path' => $config['path'], 'cookie_httponly' => '1', 'name' => $config['cookie'],
'gc_divisor' => $config['lottery'][1], 'gc_probability' => $config['lottery'][0],
'gc_maxlifetime' => $config['files_lifetime'] * 60,
);
}
}
的地方