Сеанс Magento 2 отключается - PullRequest
       9

Сеанс Magento 2 отключается

0 голосов
/ 08 октября 2019

Мне нужно иметь возможность хранить некоторые пользовательские переменные сеанса, которые существуют для пользовательских, независимо от того, вошли они в систему или нет, но по какой-то причине мои сеансы продолжают удалять сами.

Я использовал этот пример, помогающий мне добавить мой код сеанса.

Вот мой код

Файл блока

<?php

namespace MyVendor\MyModel\Block;

use Magento\Framework\View\Element\Template;

class ProductSearch extends Template {

    protected $_customSession;

    public function __construct(
        \Magento\Framework\View\Element\Template\Context $context,
        \Magento\Customer\Model\Session $customSession,
        array $data = []
    ){
        parent::__construct($context, $data);
        $this->_customSession = $customSession;
    }

    //Get the car model from the session
    public function getSessionCarModel(){
        return $this->_customSession->getCarModel();
    }

    //Unset the car model from the session
    public function unsetSessionCarModel(){
        return $this->_customSession->unsCarModel();
    }

}

ивот верхняя часть моего файла шаблона, который сортирует сеанс при его загрузке

productsearchbanner.phtml

<code><?php

    //If the user has selected a new model, unset our session then start a new one
    if(isset($_POST['modelSelect'])){
        //Unset the other sessions
        $block->unsetSessionCarModel();
        //Set the model session
        $block->setSessionCarModel($_POST['model']);
    }
    echo '<pre>';
    var_dump($_SESSION);
    echo '
';?>

Способ работы кода: если установлено значение $_POST['modelSelect'], пользователь пришел со страницы выбора модели, поэтому нам нужно снова запустить процесс и сбросить их сеанс. , но если этого не произошло, сеанс должен остаться прежним.

Моя проблема в том, что когда я прихожу со страницы выбора модели, моя переменная сеанса без проблем показывает в дампе var, как показано ниже.

enter image description here

Но потом, как только я перехожу на любую другую страницу на моем сайте (например, на главную страницу), а затем снова на страницу поиска продукта,сеанс очищен?

enter image description here

Что я делаю не так? Почему мой сеанс очищается каждый раз, когда я загружаю страницу? Мне просто нужно иметь возможность установить эквивалент $_SESSION['carModel'], и он будет постоянным для этого пользователя, независимо от того, вошли они в систему или нет, или куда они заходят.

Может кто-нибудь пожалуйстанаправить меня в правильном направлении?

1 Ответ

1 голос
/ 16 октября 2019

Установка сессий в файлах блоков или шаблонов является проблемой. Это из-за полного кеша страниц. Цикл выполнения Magento изменяется при включенном FPC.

Контроллеры или модели - это лучшее место для обновления данных сеанса.

Но если вам нужно обновить сеанс в шаблоне / блоке, тогда выможет вызывать пользовательское действие через AJAX и обновлять информацию о сеансе. Как правило, в Magento 2 необходимо выполнить следующие шаги:

  • создать новую пару контроллер / действие в существующем или новом модуле, который будет обновлять информацию о сеансе. Этот контроллер в идеале должен принимать только запросы AJAX.

  • имеет шаблон, отображаемый в контейнере before_body_end, и добавляет туда некоторый код jQuery, который будет запрашивать пару контроллер / действие для получения сеансаинформация обновлена.

Таким образом, всякий раз, когда страница загружается, она запускает обновление сеанса (или вы можете включить его для любого другого события, например, когда пользователь что-то щелкает и т. д.). ) запросив контроллер / действие, скажем, /my-module/my-controller/my-session-updater-action.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...