禁用缓存PHP服务器变量在Magento


Disable caching for PHP Server variables in Magento

我正在尝试使用$_SERVER['HTTP_USER_AGENT'] php变量的数据在Magento中的一些自定义功能。

然而,我不确定这个变量是否被缓存,因为它看起来像一个常量。

我正在使用Chrome,当我使用两个不同的选项卡时,一个带有移动仿真,一个没有,我看到相同的用户代理字符串。当我在本地PHP的测试脚本上做同样的事情时,它会向我显示特定选项卡的用户代理字符串,即移动模拟器上的移动用户代理字符串,以及桌面字符串。

我也尝试了这个使用两个不同的浏览器(Chrome和Firefox)和缓存刷新后,我打开Chrome使用iPhone模拟器,看到一个iPhone用户代理字符串,但当我打开Firefox我看到相同的iPhone用户代理字符串。

我不知道发生了什么,但我不喜欢这样。是否有一种方法来禁用缓存永久PHP $_SERVER变量在Magento?或者是否有一些万无一失的方法来获取非缓存的用户代理字符串?我试过getenv,但它做同样的事情。

开箱即用,PHP不会缓存$_SERVER中的值。更有可能的是,您的Magento生产系统使用了某种输出/全页缓存,而不考虑用户代理字符串。

我有设置缓存过期而不定义它是公共的还是私有的同样的问题,但通过将缓存控制转向private来解决它。

header("Cache-Control: private, must-revalidate");

这样,PHP将使用更多的内存和CPU,因为它没有使用共享内存。

在magento 2 FPC是最大的问题。它也会缓存$_SERVER['HTTP_USER_AGENT']变量。当我为手机应用开发者提供支持时,我也遇到过这个问题。

要解决此问题,请尝试执行

protected $httpHeader;

public function __construct(
   ...
    'Magento'Framework'HTTP'Header $httpHeader
   ...
) {
    $this->httpHeader = $httpHeader;
}
public function getUserAgent(){
  return $this->httpHeader->getHttpUserAgent();        
}

此文件Magento'Framework'HTTP'Header返回用户代理的干净值。所以没有缓存问题。