Magento 2丢弃所有会话参数

时间:2016-09-19 15:37:19

标签: php magento session magento2

我写了一个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会话来存储信息,但即使这个会话也不时被丢弃。

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

提前致谢, 托马斯

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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

对于那些也遇到问题的人,这是我的绑带修复:

我介绍了一个新的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

问候,托马斯