Magento 2 会话数据在 google chrome 中被删除
Magento 2 session data gets deleted in google chrome
问题:
当我的 magento2.3 应用程序将用户重定向到支付网关时,我可以访问所有会话数据。但是当它 returns 从那里返回时,它没有结帐会话数据或任何会话数据。这只发生在 google chrome
我已经探索过的东西
从 google chrome 发行说明 (https://www.chromium.org/updates/same-site) 我可以看到他们已将 samesite 默认值更改为“Lax”,并禁用此功能。
寻找解决方案
我想为我对任何第三方服务的所有传出请求赋予 samesite=None 值。任何帮助或领导将不胜感激。
您可以尝试按照以下步骤设置 samesite=None..
文件:etc/frontend/di.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="Magento\Framework\View\Element\Js\Cookie">
<plugin name="afterGetPath" type="namespace\module\Plugin\View\Element\Js\ManagePath" sortOrder="10"/>
</type>
</config>
文件:Plugin/View/Element/Js/ManagePath.php
namespace namespace\module\Plugin\View\Element\Js;
use Magento\Framework\View\Element\Js\Cookie;
class ManagePath
{
public function afterGetPath(\Magento\Framework\View\Element\Js\Cookie $subject, $path)
{
if (preg_match('/SameSite/', $path)) {
$path_array = explode(';', $path);
$path = $path_array[0];
}
return $path;
}
}
文件:etc/di.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd">
<preference for="Magento\Framework\Session\Config\ConfigInterface" type="namespace\module\Session\CustomConfig"/>
</config>
文件:Session/CustomConfig.php
namespace namespace\module\Session;
use Magento\Framework\Session\Config as DefaultConfig;
class CustomConfig extends DefaultConfig
{
public function setCookiePath($path, $default = null)
{
parent::setCookiePath($path, $default);
$path = $this->getCookiePath();
//check and update path of cookie
if (!preg_match('/SameSite/', $path)) {
$path .= '; SameSite=None';
$this->setOption('session.cookie_path', $path);
}
return $this;
}
}
注意 : 用你的 namespace 和 替换命名空间和模块模块.
由于我没有足够的声誉来评论已接受的答案,我必须指出它对我来说不起作用,因为 Chrome 要求所有 SameSite 设置为“none" 被标记为安全。
修复是添加:
$path .= '; SameSite=None ; secure';
如果不将它们标记为安全,我在将商品添加到购物车时会遇到问题。
为我工作,希望它能帮助遇到同样问题的其他人。
问题:
当我的 magento2.3 应用程序将用户重定向到支付网关时,我可以访问所有会话数据。但是当它 returns 从那里返回时,它没有结帐会话数据或任何会话数据。这只发生在 google chrome
我已经探索过的东西
从 google chrome 发行说明 (https://www.chromium.org/updates/same-site) 我可以看到他们已将 samesite 默认值更改为“Lax”,并禁用此功能。
寻找解决方案
我想为我对任何第三方服务的所有传出请求赋予 samesite=None 值。任何帮助或领导将不胜感激。
您可以尝试按照以下步骤设置 samesite=None..
文件:etc/frontend/di.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="Magento\Framework\View\Element\Js\Cookie">
<plugin name="afterGetPath" type="namespace\module\Plugin\View\Element\Js\ManagePath" sortOrder="10"/>
</type>
</config>
文件:Plugin/View/Element/Js/ManagePath.php
namespace namespace\module\Plugin\View\Element\Js;
use Magento\Framework\View\Element\Js\Cookie;
class ManagePath
{
public function afterGetPath(\Magento\Framework\View\Element\Js\Cookie $subject, $path)
{
if (preg_match('/SameSite/', $path)) {
$path_array = explode(';', $path);
$path = $path_array[0];
}
return $path;
}
}
文件:etc/di.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd">
<preference for="Magento\Framework\Session\Config\ConfigInterface" type="namespace\module\Session\CustomConfig"/>
</config>
文件:Session/CustomConfig.php
namespace namespace\module\Session;
use Magento\Framework\Session\Config as DefaultConfig;
class CustomConfig extends DefaultConfig
{
public function setCookiePath($path, $default = null)
{
parent::setCookiePath($path, $default);
$path = $this->getCookiePath();
//check and update path of cookie
if (!preg_match('/SameSite/', $path)) {
$path .= '; SameSite=None';
$this->setOption('session.cookie_path', $path);
}
return $this;
}
}
注意 : 用你的 namespace 和 替换命名空间和模块模块.
由于我没有足够的声誉来评论已接受的答案,我必须指出它对我来说不起作用,因为 Chrome 要求所有 SameSite 设置为“none" 被标记为安全。 修复是添加:
$path .= '; SameSite=None ; secure';
如果不将它们标记为安全,我在将商品添加到购物车时会遇到问题。
为我工作,希望它能帮助遇到同样问题的其他人。