【问题标题】:How to prevent CakePHP 3.0 from extending session timeout with ajax requests?如何防止 CakePHP 3.0 使用 ajax 请求延长会话超时?
【发布时间】:2015-11-24 18:06:15
【问题描述】:

当后台 ajax 调用服务器时,如何防止 CakePHP 3.x 扩展我的用户会话?我也在使用 jquery 的 $.ajax() 。

我有一个 setInterval 每分钟运行一次以获取一些用户通知。我的应用程序是 EHR,我需要保持严格的会话超时。我的获取通知 Javascript 基本上只是让我的会话不受限制,因为 ajax 调用正在扩展会话。

我以为几周前在 CakePHP 的书中看到了一些关于此的内容,但我今天似乎找不到了。

谢谢, 达人

【问题讨论】:

  • 那么,当您说“严格会话超时”时,您到底是什么意思?从您的问题标题中,您可能会认为您只希望后台 AJAX 请求不影响超时,而用户的前台活动应该延长会话吗?
  • 严格来说会话必须在 10 分钟无活动后超时。因此后台 Ajax 请求不应扩展会话。现在我的 Ajax 请求正在扩展会话,这在我的用例中是不可取的。

标签: jquery ajax cakephp session-cookies cakephp-3.0


【解决方案1】:

通常这是您需要自己处理的事情,即实现您自己的超时机制。如何处理,取决于。

您只想排除 AJAX 后台活动,因此您需要有权访问请求对象,并且您很可能希望尽早处理此问题。鉴于此先决条件,我可能会使用调度程序过滤器,您可以在其中根据当前请求是否为 AJAX 请求来延长超时时间,并在涉及任何控制器之前销毁会话。

这是一个非常基本的、几乎不言自明的示例,它假定为 session configuration 设置了 timeout 选项值。

src/Routing/Filter/SessionTimeoutFilter.php

namespace App\Routing\Filter;

use Cake\Core\Configure;
use Cake\Event\Event;
use Cake\Routing\DispatcherFilter;

class SessionTimeoutFilter extends DispatcherFilter
{
    public function beforeDispatch(Event $event)
    {
        /* @var $request \Cake\Network\Request */
        $request = $event->data['request'];

        $session = $request->session();
        $lastAccess = $session->read('SessionTimeoutFilter.lastAccess');

        if (
            $lastAccess !== null &&
            time() - $lastAccess > Configure::read('Session.timeout') * 60
        ) {
            $request->session()->destroy();
        }

        if (!$request->is('ajax')) {
            $session->write('SessionTimeoutFilter.lastAccess', time());
        }
    }
}

src/config/bootstrap.php

DispatcherFactory::add('SessionTimeout');

根据您的具体需求,您当然可以在应用程序中几乎可以访问请求对象的任何位置放置类似的代码。

【讨论】:

  • 完美运行。我确实添加了另一个检查以查看是否设置了查询字符串参数,因此我可以允许 ajax ping 请求来扩展会话。如果它们在表单页面上处于活动状态,我有一些会话监控 javascript 会扩展会话。如果他们在页面上留下未提交的作品,我会有一个特殊的弹出窗口,允许他们重新进行身份验证,这样他们就不会丢失他们的作品。我有一个用户通知脚本,它正在检查新通知,基本上永远延长了会话,这不允许 X 分钟后自动注销工作。
猜你喜欢
  • 2014-07-16
  • 1970-01-01
  • 1970-01-01
  • 2015-09-08
  • 2012-09-29
  • 2015-03-10
  • 2013-11-05
  • 2012-02-08
  • 2011-04-17
相关资源
最近更新 更多