- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I am unable to find dev docs for creating Custom Session and Initialize it before PreDispatch,
Like Customer session, Core Session, and Checkout Session
Thanks
Sasikiran Kesavan
Solved! Go to Solution.
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Steps to create custom session and Initialize it preDispatch
Step 1 : Create Session.php file in Model
<?php
/**
* Copyright © 2016 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Vendor\Modulename\Model;
/**
* Message session model
*/
class Session extends \Magento\Framework\Session\SessionManager
{
protected $_session;
protected $_coreUrl = null;
protected $_configShare;
protected $_urlFactory;
protected $_eventManager;
protected $response;
protected $_sessionManager;
public function __construct(
\Magento\Framework\App\Request\Http $request,
\Magento\Framework\Session\SidResolverInterface $sidResolver,
\Magento\Framework\Session\Config\ConfigInterface $sessionConfig,
\Magento\Framework\Session\SaveHandlerInterface $saveHandler,
\Magento\Framework\Session\ValidatorInterface $validator,
\Magento\Framework\Session\StorageInterface $storage,
\Magento\Framework\Stdlib\CookieManagerInterface $cookieManager,
\Magento\Framework\Stdlib\Cookie\CookieMetadataFactory $cookieMetadataFactory,
\Magento\Framework\App\Http\Context $httpContext,
\Magento\Framework\App\State $appState,
\Magento\Framework\Session\Generic $session,
\Magento\Framework\Event\ManagerInterface $eventManager,
\Magento\Framework\App\Response\Http $response
) {
$this->_session = $session;
$this->_eventManager = $eventManager;
parent::__construct(
$request,
$sidResolver,
$sessionConfig,
$saveHandler,
$validator,
$storage,
$cookieManager,
$cookieMetadataFactory,
$appState
);
$this->response = $response;
$this->_eventManager->dispatch('sessionname_session_init', ['sessionname_session' => $this]);
}
}
Step 2:
Inside Model/Session create Storage.php
namespace Vendor\Modulename\Model\Session;
class Storage extends \Magento\Framework\Session\Storage
{
/**
* @param \Magento\Customer\Model\Config\Share $configShare
* @param \Magento\Store\Model\StoreManagerInterface $storeManager
* @param string $namespace
* @param array $data
*/
public function __construct(
\Magento\Store\Model\StoreManagerInterface $storeManager,
$namespace = 'sessionname',
array $data = []
) {
parent::__construct($namespace, $data);
}
}
Step 3 :
Inside etc create di.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:frameworkbjectManager/etc/config.xsd">
<type name="Vendor\Modulename\Model\Session">
<arguments>
<argument name="storage" xsi:type="object">Vendor\Modulename\Model\Session\Storage</argument>
</arguments>
</type>
</config>
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Steps to create custom session and Initialize it preDispatch
Step 1 : Create Session.php file in Model
<?php
/**
* Copyright © 2016 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Vendor\Modulename\Model;
/**
* Message session model
*/
class Session extends \Magento\Framework\Session\SessionManager
{
protected $_session;
protected $_coreUrl = null;
protected $_configShare;
protected $_urlFactory;
protected $_eventManager;
protected $response;
protected $_sessionManager;
public function __construct(
\Magento\Framework\App\Request\Http $request,
\Magento\Framework\Session\SidResolverInterface $sidResolver,
\Magento\Framework\Session\Config\ConfigInterface $sessionConfig,
\Magento\Framework\Session\SaveHandlerInterface $saveHandler,
\Magento\Framework\Session\ValidatorInterface $validator,
\Magento\Framework\Session\StorageInterface $storage,
\Magento\Framework\Stdlib\CookieManagerInterface $cookieManager,
\Magento\Framework\Stdlib\Cookie\CookieMetadataFactory $cookieMetadataFactory,
\Magento\Framework\App\Http\Context $httpContext,
\Magento\Framework\App\State $appState,
\Magento\Framework\Session\Generic $session,
\Magento\Framework\Event\ManagerInterface $eventManager,
\Magento\Framework\App\Response\Http $response
) {
$this->_session = $session;
$this->_eventManager = $eventManager;
parent::__construct(
$request,
$sidResolver,
$sessionConfig,
$saveHandler,
$validator,
$storage,
$cookieManager,
$cookieMetadataFactory,
$appState
);
$this->response = $response;
$this->_eventManager->dispatch('sessionname_session_init', ['sessionname_session' => $this]);
}
}
Step 2:
Inside Model/Session create Storage.php
namespace Vendor\Modulename\Model\Session;
class Storage extends \Magento\Framework\Session\Storage
{
/**
* @param \Magento\Customer\Model\Config\Share $configShare
* @param \Magento\Store\Model\StoreManagerInterface $storeManager
* @param string $namespace
* @param array $data
*/
public function __construct(
\Magento\Store\Model\StoreManagerInterface $storeManager,
$namespace = 'sessionname',
array $data = []
) {
parent::__construct($namespace, $data);
}
}
Step 3 :
Inside etc create di.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:frameworkbjectManager/etc/config.xsd">
<type name="Vendor\Modulename\Model\Session">
<arguments>
<argument name="storage" xsi:type="object">Vendor\Modulename\Model\Session\Storage</argument>
</arguments>
</type>
</config>
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Re: Create Custom session and Initialize it preDispatch
Thanks for the detailed solution,
It is working if my cache is disabled. if i enable the cache, i am unable to fetch get values from custom session.
it is working in my custom module controller/action pages,
But not working in product, category and home pages, when i try to get values from the block.
Thanks
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Re: Create Custom session and Initialize it preDispatch
In your layout xml file just add
<block class="" name="" template="" cacheable="false"/>