【问题标题】:Check for Session timeout in Laravel在 Laravel 中检查会话超时
【发布时间】:2013-01-19 06:39:18
【问题描述】:

我只是想知道是否有人知道如何在 Laravel 中检查会话超时。

您可以检查会话是否有特定项目:

if (Session::has('name'))
{
     $name = Session::get('name');
}

但您无法检查会话是否已过期。如果我能以更具体的方式向用户报告,那就太好了。 "您的会话已超时,请重新开始。"

有什么想法吗?

【问题讨论】:

    标签: php laravel laravel-3


    【解决方案1】:

    只需使用与会话类本身相同的逻辑即可。

    if ((time() - Session::activity()) > (Config::get('session.lifetime') * 60))
    {
       // Session expired
    }
    

    将它放在您的“之前”过滤器中 - 它会在每个请求上运行。

    【讨论】:

    • 哇,我以前从未见过 ::activity()。记录在哪里?
    • 没有记录——我只是去了会话课,查看了所有功能,试图找出问题的答案:)
    • @mattl 虽然 Taylor(Laravel 的创建者和首席开发人员)正在研究这个以使其更容易做到,但这个答案绝对是最聪明的方法。你真的应该接受这个答案。 [:)]。
    • @TheShiftExchange Call to undefined method Illuminate\Session\Store::activity() 为什么会这样?我使用 Laravel 4
    • @giannischristofakis:activity 方法似乎从 Laravel 中消失了。 An alternate approach is documented on Laravel.io.
    【解决方案2】:

    为什么不这样做?

    if (!Session::has('name'))
    {
         $sessionTimeout = 1;
    }
    

    如果会话超时,则不再设置名称。然后你可以编写一些代码来响应 $sessionTimeout == 1;

    【讨论】:

    • 这并没有完全做到这一点,因为我试图检查是否有一个项目集但已经用完了时间,而不仅仅是它是否存在。
    【解决方案3】:

    顺便说一句, 特别是如果您需要会话生命周期,

    使用这个:

    {{ session('lifetime') }}
    

    描述时,

    使用这个:

    session(['User' => $user, 'lifetime' => 3600]);
    

    【讨论】:

      猜你喜欢
      • 2016-08-04
      • 1970-01-01
      • 2011-03-26
      • 2011-09-04
      • 2014-03-11
      • 2015-02-24
      • 1970-01-01
      • 2011-09-01
      相关资源
      最近更新 更多