【问题标题】:Magento 2 discards all session parametersMagento 2 丢弃所有会话参数
【发布时间】:2016-09-19 15:37:19
【问题描述】:

我编写了一个 magento 控制器,它在客户会话中存储了一些过滤器信息。

根据 magento 2 文档,我使用依赖注入让 magento 为我生成会话对象:

/**
 * @var \Magento\Catalog\Model\Session
 */
protected $_filterSession;

/**
 * @param \Magento\Customer\Model\Session $filterSession
 */
public function __construct( \Magento\Customer\Model\Session $filterSession)
{
    $this->_filterSession = $filterSession;
}

注入过程运行良好。我能够访问会话,在其中存储一个变量并在进一步调用时返回它。

但magento似乎不时丢弃整个会话信息。我无法准确识别 magento 丢弃信息的那一刻,这似乎有点随机。

代码如下:

$this->_filterSession->setFrequency($frequency);
$frequency = $this->_filterSession->getFrequency();

我尝试了不同的会话范围,但行为是相同的。

经过多次尝试,我尝试使用 PHP-session 来存储信息,但有时甚至这个 session 也被丢弃了。

我不知道我做错了什么,也不知道这种奇怪行为的原因是什么。有没有其他人有类似的问题或想法是什么原因?

提前致谢, 托马斯

【问题讨论】:

    标签: php magento session magento2


    【解决方案1】:

    这通常发生在浏览器丢失会话 cookie 时。当变量丢失时,您应该检查域名是否在会话期间更改。或者使用不同的浏览器。可能是一些行为不端的浏览器插件。或者一些 Magento 扩展。目前许多 Mageno 2 扩展都写得不好。

    【讨论】:

    • 我认为你是对的。我无法确定是哪个扩展执行此操作,但由于从 magento 本身使用的会话参数也丢失了,因此必须有一个错误的扩展。
    【解决方案2】:

    我在使用 PHP 时遇到了类似的问题。我设置了session.referer_check。因此,当用户来自外部页面时,会话就会丢失。如果这是您的问题,只需ini_set('session.referer_check', '');

    【讨论】:

    • 感谢您的回答。但是,当我在同一选项卡内的同一页面上导航时,也会出现这种现象。反正查了一下。没有解决问题。
    【解决方案3】:

    我没有找到问题本身的解决方案,但避免了它。

    对于那些也遇到问题的人,这是我的创可贴修复:

    我介绍了一个新的 cookie

    public function getFrequency()
    {
        $frequency = $this->_cookieManager->getCookie(self::FREQUENCY_SESSION_KEY);
    
    
        if( !isset( $frequency ) )
        {
            $frequency = self::FREQUENCY_DEFAULT_VALUE;
        }
    
        return $frequency;
    }
    
    public function setFrequency( $frequency )
    {
        $metadata = $this->_cookieMetadataFactory
            ->createPublicCookieMetadata()
            ->setPath($this->_sessionManager->getCookiePath())
            ->setDomain($this->_sessionManager->getCookieDomain());
    
        $this->_cookieManager->setPublicCookie(
            self::FREQUENCY_SESSION_KEY,
            $frequency,
            $metadata
        );
    }
    

    有关更多详细信息,我建议您查看此thread

    问候,托马斯

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-30
      • 2016-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多