Session Laravel cookie会话生存期

Session Laravel cookie会话生存期,session,cookies,laravel,lifetime,Session,Cookies,Laravel,Lifetime,我将我的Laravel用作OAuth2客户机,我需要保留Tokeni cookies。所以,我将驱动程序设置为cookie,并在整个生命周期内保持默认值 当任何用户在登录时选中“记住我”时,我尝试使用以下代码更改生存期: $lifetime = time() + 60 * 60 * 24 * 365;// one year Config::set('session.lifetime', $lifetime); 但是没有成功。在另一个控制器中,我检查了生存期的值,每次我都得到了默

我将我的Laravel用作OAuth2客户机,我需要保留Tokeni cookies。所以,我将驱动程序设置为cookie,并在整个生命周期内保持默认值

当任何用户在登录时选中“记住我”时,我尝试使用以下代码更改生存期:

    $lifetime = time() + 60 * 60 * 24 * 365;// one year
    Config::set('session.lifetime', $lifetime);
但是没有成功。在另一个控制器中,我检查了生存期的值,每次我都得到了默认值

\Log::info(\Config::get('session.lifetime'));
编辑#1:

够了吗

if(Input::has('rememberMe')) {
   $lifetime = time() + 60 * 60 * 24 * 365; // one year
   Session::put('Expires', $lifetime);
}
编辑#2:

我将acess_令牌密钥放在与上面示例中的Expires相同的方式上,如:

public function signin() {

    /**
     * Code for getting *client_code* and *client_state* from API server
     */

    $access_token = $this->provider->getAccessToken('authorization_code', $form_data);

    // $access_token is object and contain all data (access_token, refresh_token, expires)
    Session::put('access_token', $access_token);
    Session::put('refresh_token', $access_token->refreshToken);
    Session::put('token_expires', $access_token->expires);

    if(Input::has('rememberMe')) {
       $lifetime = time() + 60 * 60 * 24 * 365; // one year
       Session::put('expires', $lifetime);
    }


    return Response....

}

这是“默认”Laravel会话(我在/app/config/session.php中将驱动程序从文件更改为cookie)。我知道应该在/app/config/session.php文件中设置生存时间,但正如您所看到的,我需要更长的“记住我”选项的生存时间,实际上,当您在
控制器中这样设置值时:

$lifetime = time() + 60 * 60 * 24 * 365;// one year
Config::set('session.lifetime', $lifetime);
它不会更新文件中的值,而是仅为当前请求(在内存中)设置该值,并且当您使用来自另一个控制器/请求的值检查该值时,如下所示:

Config::get('session.lifetime');
public function signin() {

    /**
     * Code for getting *client_code* and *client_state* from API server
     */

    $access_token = $this->provider->getAccessToken('authorization_code', $form_data);

    // $access_token is object and contain all data (access_token, refresh_token, expires)
    Session::put('access_token', $access_token);
    Session::put('refresh_token', $access_token->refreshToken);
    Session::put('token_expires', $access_token->expires);

    if (Input::has('rememberMe')) {
       $expires = time() + 60 * 60 * 24 * 365; // one year
    } else {
       $expires = time() + 60 * 60 * 2; // two hours
    }

    Session::put('cookie_expires', $expires);

    return Response....

}
您将从文件系统的原始值中获取该值。文件中提到了这一点,如下所示:

在运行时设置的配置值仅为 当前请求,并且不会结转到后续请求


我不知道
会话::put('expires',$life)在哪里将被使用。对我来说,它似乎是一个普通的cookie变量,而不是与任何cookie关联的实际生存期

您将需要在设置cookie之前设置cookie生存期,并以Laravel知道您正在设置新的cookie生存期值的方式进行设置

public function signin() {

    $access_token = $this->provider->getAccessToken('authorization_code', $form_data);

    if (!$access_token) {
        return Response... // Respond some other way if authentication failed.
    }

    // Check rememberMe first so you can set the right session.lifetime before setting any cookies.
    if(Input::has('rememberMe')) {
       $lifetime = time() + 60 * 60 * 24 * 365; // one year
       Config::set('session.lifetime', $lifetime);
    }

    Session::put('access_token', $access_token);
    Session::put('refresh_token', $access_token->refreshToken);
    Session::put('token_expires', $access_token->expires);

    return Response....
}

我还借此机会添加了
if(!$access\u令牌){
在设置cookie之前,因为您不会总是成功地进行身份验证。

因为在您的案例中使用cookie作为会话驱动程序似乎是可以的,您可以在
/app/config/session.php
中默认将会话生存期设置为一年,并将cookie的过期日期与tok一起存储这将允许您人工控制cookie的有效性

基本上,您的
signin
方法可以如下所示:

Config::get('session.lifetime');
public function signin() {

    /**
     * Code for getting *client_code* and *client_state* from API server
     */

    $access_token = $this->provider->getAccessToken('authorization_code', $form_data);

    // $access_token is object and contain all data (access_token, refresh_token, expires)
    Session::put('access_token', $access_token);
    Session::put('refresh_token', $access_token->refreshToken);
    Session::put('token_expires', $access_token->expires);

    if (Input::has('rememberMe')) {
       $expires = time() + 60 * 60 * 24 * 365; // one year
    } else {
       $expires = time() + 60 * 60 * 2; // two hours
    }

    Session::put('cookie_expires', $expires);

    return Response....

}

然后,任何时候你想使用
access\u令牌
,你都会首先检查
cookie\u过期
是否已过期(如果已过期,请在清除会话后将用户重定向到登录页面)

strtotime("+1 year")

这对人类来说更有意义

OK。我如何设置“当前”会话/登录用户的生存期?从
app/config/session.php
文件中,使其持久化。是的,但对所有会话来说都是如此。一些用户希望长时间保留会话/cookie,而一些用户不希望。这让我感到困惑。我如何为不同的用户制作不同的cookie租用参数,在用户从API服务器获得成功后关于成功登录?能否显示将令牌设置到cookie中的代码?您只能在设置期间更改cookie的到期日,并且它是按cookie值设置的。如果您希望“记住我”功能您最好使用Sentry。不,这是没有数据库的客户端;)谢谢您的回复。我昨天尝试了类似的方法,但没有成功:(这不是我们期望的覆盖会话生存期。您尝试过吗?这里有另一个想法:
Cookie::queue(Cookie::make('access_token',$access_token,$life));
(改编自)