在不刷新会话的情况下点击路线

Hitting route without refreshing session

我正在使用 Laravel 4 构建我的单页应用程序,我需要实施会话超时,以便在检测到用户时立即重定向,我一直在尝试检查$_SESSION/Session::exists() array through some polling requests but everytime I hit a route session is refreshed.

如何有效地轮询 Laravel 上的会话信息?我是否需要做一些更复杂的事情,比如保持开放连接(Websockets/Long 池)?

我觉得这应该是一个开箱即用的功能,但奇怪的是似乎没有人实现它,是因为大多数实现是逐页而不是一页 + ajax?

据我所知 Laravel 中没有开箱即用的功能,但实际上很容易实现。举个例子:您可以使用 Session::put('logintime', time()); 将用户登录的时间存储在会话变量中,然后检查是否存在超时。

示例(超时 15 分钟):

function isTimeout() {
    return !Session::has('logintime') || Session::get('logintime') + (15 * 60) <= time();
}

然后您可以根据需要使用它来响应 AJAX 请求。

这是个有趣的问题,您应该为此使用中间件。如果您在 laravel 4.1 或以上 laravel 使用 StackPHP

从 fideloper 查看这个 link,它可能会有用。

只需 set/update 中间件中的会话变量(由您定义)并创建不使用 API 中的中间件的路由来查询该变量。

对于某些人来说,由于知识的限制,这可能是一个远景,但我在下面做了我的应用程序中的实时数据显示,值得开始使用 NodeJS 的努力(而且它比人们想象的更容易stack PHP 开发人员已经熟悉 JS,强烈建议进入 MEAN stack)

我在 PHP 框架中编写核心功能,对于任何我需要实时显示或与用户交互的东西,而不是轮询或使用 php 与 websockets,我介绍一个额外的 nodejs nginx 服务器并使用 socket.io 提供数据,这很好,因为它将与您的数据库的连接保持在最低限度(即因此避免了 Mysql 中的任何最大连接问题)并且是超级可扩展的,因为它不是轮询,而是使用可观察的模式,将所有客户端连接保存在一个数组中,并在观察者看到数据持久层中的变化时推送新数据,而不是让你的服务器超级忙碌,因为无数烦人的客户端一直在轮询你的数据库。

如果您还没有这样做,我还建议您为您的 PHP 应用服务器放弃 apache,并使用 php fpm

研究 Nginx