【问题标题】:Laravel Application session timeout from user table来自用户表的 Laravel 应用程序会话超时
【发布时间】:2020-02-25 23:57:32
【问题描述】:

我想覆盖 config/session.php 文件中的 Laravel 默认应用程序会话值。

它需要为用户基础工作。例如,

如果用户 Sam 在他的用户配置文件首选项中设置会话超时 10 分钟,则应用程序会话仅在他不活动超过 10 分钟时有效 10 分钟,然后它需要再次请求登录。

在用户表中,用户首选会话超时存储在一列喜欢session_timeout,因此我的应用程序仅处于理想状态,即用户首选会话超时。如果有可能覆盖默认会话超时?

提前致谢。

【问题讨论】:

  • 更改 lifetime 属性 (app/config/session.php) 或更好地将环境变量 SESSION_LIFETIME 更改/添加为 600 或您需要的值。
  • 要在会话开始之前设置超时,这工作stackoverflow.com/a/59920215/42106

标签: php laravel session laravel-5.6 lifetime


【解决方案1】:

根据您设置身份验证的方式,session.lifetime 实际上并不是登录会话的持续时间。它是您保存到会话的所有数据的最短持续时间(例如使用session()->put('somekey', 'somedata'))。

因此,您仍然可以使用创建remember_web_d01f58ea4edcf9430959ba362b50f014c72a889d cookie 的remember me 选项登录,但在登录之前,您通常已经拥有laravel_session cookie(或{APP_NAME}_session)。在这种情况下丢弃laravel_session cookie 只会重置会话,但由于remember_web_... cookie,您将保持登录状态。

因此,考虑到这一点,您可能需要重新考虑您的解决方案。

如果您仍想更改会话生命周期,可以尝试这样的方法。 请注意,我没有对此进行测试,您可能会遇到问题

这段代码(没有$this->app->booted())甚至可能需要移动到Middleware,所以你的Auth::user()肯定已经被加载了,即便如此我想知道它是否真的会导致会话过期或扩展,因为这发生在 Laravel 的生命周期中。

注意会话的删除是基于垃圾收集抽签,这基本上意味着 100 个请求中有 2 个会话将被垃圾收集。请参阅session.lottery 配置。因此,过期的会话可能不会因为这次抽奖而立即过期。

// Providers/AppServiceProvider.php
public function boot() {
    $this->app->booted(function() {
        config([
            // Override session lifetime with data from user record.
            'session.lifetime' => Auth::user()->session_lifetime
        ]);
    });
}
}

【讨论】:

    【解决方案2】:

    你应该随时更改 laravel 环境变量

    $userSessionTimout=$users['session_timeout']; 
    
    config(['session.lifetime' => $userSessionTimout]);
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-23
    • 2015-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多