点击路线没有刷新会话

时间:2015-02-23 16:40:33

标签: php laravel session-cookies polling laravel-routing

我正在使用Laravel 4来构建我的单页应用程序,我需要实现一个会话超时,以便在检测到用户后立即重定向,我一直在尝试检查$ _SESSION / Session: :exists()数组通过一些轮询请求,但每当我点击路由时,会话都会被刷新。

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

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

3 个答案:

答案 0 :(得分:1)

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

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

只需在中间件中设置/更新会话变量(由您定义),并创建不使用API​​中的中间件来查询该变量的路由。

答案 1 :(得分:0)

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

示例(超时15分钟):

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

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

答案 2 :(得分:-1)

由于某些人的知识界限,这可能是一个长镜头,但我在下面的应用程序中进行实时数据显示,并且值得开始使用NodeJS(以及它的开发工作)比人们想象的更容易PHP堆栈开发人员已经熟悉JS,强烈建议进入MEAN堆栈)

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

如果您还没有完成,我还建议您为PHP应用程序服务器删除apache并使用php fpm查看Nginx