Necesito poder almacenar algunas variables de sesión personalizadas que existen para la personalización, independientemente de si han iniciado sesión o no, pero por alguna razón mis sesiones siguen eliminándose.

He utilizado este ejemplo para ayudarme agregue mi código de sesión en.

Aquí está mi código

Bloquear archivo

<?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();
    }

}

Y aquí está la parte superior de mi archivo de plantilla que ordena la sesión cuando se carga

productsearchbanner.phtml

<?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 '</pre>';
?>

La forma en que debe funcionar el código es que, si se establece $_POST['modelSelect'], el usuario ha venido de la página de selección de modelo, por lo que debemos iniciar el proceso nuevamente y restablecer su sesión, pero si no lo ha hecho, la sesión debe seguir siendo la misma.

Mi problema es que, cuando vengo de la página de selección de modelo, mi variable de sesión se muestra en el volcado de var no hay problema, como se muestra a continuación.

enter image description here

Pero tan pronto como voy a cualquier otra página de mi sitio (por ejemplo, la página de inicio) y luego vuelvo a la página de búsqueda de productos, ¿la sesión ha finalizado?

enter image description here

¿Qué estoy haciendo mal? ¿Por qué mi sesión se borra cada vez que cargo una página? Solo necesito poder establecer el equivalente de $_SESSION['carModel'] y que sea persistente para ese usuario, independientemente de si ha iniciado sesión o no, o en qué lugar del sitio van.

¿Puede alguien indicarme el camino correcto?

0
S_R 8 oct. 2019 a las 14:48

1 respuesta

La mejor respuesta

Configurar sesiones en archivos de Bloques o Plantilla es un problema. Esto se debe a la caché de página completa. El ciclo de ejecución de Magento cambia con FPC activado.

Los controladores o modelos son los mejores lugares para actualizar los datos de la sesión.

Pero, si necesita actualizar su sesión en una plantilla / bloque, puede llamar a una acción personalizada a través de AJAX y hacer que actualice la información de la sesión. Generalmente, uno necesitaría seguir estos pasos en Magento 2:

  • cree un nuevo par controlador / acción en un módulo nuevo o existente, que actualizaría la información de la sesión. Idealmente, este controlador debería aceptar solo solicitudes AJAX.

  • tener una plantilla renderizada en el contenedor before_body_end y arrojar algo de código jQuery allí, que consultará el par controlador / acción para actualizar la información de la sesión.

De esta manera, siempre que se cargue la página, activará una actualización de sesión (o puede hacer que se active en cualquier otro evento, por ejemplo, cuando un usuario hace clic en algo, etc.) solicitando su controlador / acción, por ejemplo, /my-module/my-controller/my-session-updater-action .

1
SayB 16 oct. 2019 a las 16:49