编程语言
首页 > 编程语言> > php – Ajax正在失去会话

php – Ajax正在失去会话

作者:互联网

我将Symfony应用程序从Symfony 4.0.7升级到Symfony 4.1,之后AJAX调用丢失了会话值.

我同时调用了大约6个ajax请求.其中第一个进展顺利,但其他人正在失去会话价值.它发生在迁移到Symfony 4.1之后,仅用于AJAX调用.有任何想法吗?

编辑:只有在同时调用ajax时才会发生.我在调用ajax之间添加例如100毫秒的延迟然后一切正常.

edit2:它发生在4个不同的服务器上. 2台dev服务器,1台测试服务器和1台实时服务器.所有这些都运行在NGINX和php7上

解决方法:

可能的原因可能如下::

Allow to cache requests that use sessions:

每当在请求期间启动会话时,Symfony都会将响应转换为私有的非可缓存响应,以防止泄露私人信息.但是,即使在某些情况下也可以缓存使用会话的请求.

例如,可以为属于该组的所有用户缓存与某个用户组相关的信息.处理这些高级缓存方案超出了Symfony的范围,但可以使用FOSHttpCacheBundle解决它们.

为了禁用使用会话无法缓存的请求的默认Symfony行为,在Symfony 4.1中我们添加了可以添加到响应的NO_AUTO_CACHE_CONTROL_HEADER标头:

use Symfony\Component\HttpKernel\EventListener\AbstractSessionListener;
$response->headers->set(AbstractSessionListener::NO_AUTO_CACHE_CONTROL_HEADER, 'true');

Deprecate some uses of Request::getSession()

在没有会话时使用Request :: getSession()已在Symfony 4.1中弃用,它将在Symfony 5.0中引发异常.解决方案是始终首先检查Request :: hasSession()方法是否存在会话:

if ($request->hasSession() && ($session = $request->getSession())) {
    $session->set('some_key', 'some_value');
}

更多关于Ref:Here.

标签:symfony4,php,symfony
来源: https://codeday.me/bug/20190910/1800794.html