首页 > 解决方案 > 使用 socket.io 的 Laravel 会话超时警告

问题描述

我试图在 20 分钟后为用户创建一个锁定屏幕(为了测试我放了 20 秒)。

我创建了一个中间件,它重定向到锁定屏幕,用户可以在其中插入密码以再次解锁。这在重新加载时工作正常,但我想用 socket.io 来做,所以用户会在帐户进入锁定状态前 5 分钟收到警告,这就是我苦苦挣扎的地方。

这是我的中间件

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request $request
     * @param  \Closure $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {

        if (!$this->session->has('lastActivityTime')) {
            $this->session->put('lastActivityTime', time());
        } else if (time() - $this->session->get('lastActivityTime') > $this->getTimeOut()) {
            broadcast(new SessionTimeoutCheck('hello'));
            $this->session->forget('lastActivityTime');
            $this->session->put('locked', true);

            return redirect($this->getRedirectUrl())->with([$this->getSessionLabel() => 'You have been inactive.']);

        }
        $this->session->put('lastActivityTime', time());

        return $next($request);
    }

这适用于重新加载。

我在我的客户端 JS 上有这个

    /**
 * @desc Session timeout warning and lock screen
 */
socket.emit('private.user.channel', {
    channel: 'private.user.channel.' + user_id,
}).on("App\\Events\\API\\SessionTimeoutCheck", function (data) {
    console.log(data);
});

所以现在我想知道是否应该创建一个命令,每分钟运行一次以检查特定时间是否已经过去,然后显示警告或最好的方法是什么?

标签: laravel

解决方案


推荐阅读