Magento 2 会话数据在谷歌浏览器中被删除

Aja*_*jay 5 php magento magento2

问题:
当我的 magento2.3 应用程序将用户重定向到支付网关时,我可以访问所有会话数据。但是当它从那里返回时,它没有结帐会话数据或任何会话数据。这只发生在谷歌浏览器

我已经探索过的事情
从谷歌浏览器发行说明(https://www.chromium.org/updates/same-site)我可以看到他们已将 samesite 默认值更改为“ Lax ”,并禁用此功能。

解决方案寻找
我想为我对任何第三方服务的所有传出请求赋予samesite=None值。任何帮助或领导将不胜感激。

小智 6

您可以尝试按照以下步骤设置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>
Run Code Online (Sandbox Code Playgroud)

文件:插件/视图/元素/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;
    }
}
Run Code Online (Sandbox Code Playgroud)

文件: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>

Run Code Online (Sandbox Code Playgroud)

文件:会话/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;
    }
}

Run Code Online (Sandbox Code Playgroud)

注意:用你的命名空间模块替换命名空间模块