在对服务器进行后台Ajax调用时,如何防止CakePHP 3.x扩展我的用户会话?我也在使用jquery的$ .ajax()。
我有一个setInterval每分钟运行一次,以获取一些用户通知。我的应用程序是EHR,我需要保持严格的会话超时。我的获取通知Javascript基本上使我的会话不受限制,因为ajax调用扩展了会话。
我以为几周前在CakePHP书中看到了有关此内容的信息,但今天似乎找不到了。
谢谢,达伦
通常,这是您需要自己处理的事情,即实现自己的超时机制。如何处理,取决于。
您只想排除AJAX后台活动,因此您需要有权访问请求对象,并且您很可能希望尽早处理此事。鉴于此前提条件,我可能会使用调度程序过滤器,您可以在其中根据当前请求是否为AJAX请求来延长超时,并在涉及任何控制器之前销毁会话。
这是一个非常基本的示例,它假定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');
当然,根据您的特定需求,您当然可以在您可以访问请求对象的应用程序中的几乎任何位置放置类似的代码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句