What are the Slack Archives?

It’s a history of our time together in the Slack Community! There’s a ton of knowledge in here, so feel free to search through the archives for a possible answer to your question.

Because this space is not active, you won’t be able to create a new post or comment here. If you have a question or want to start a discussion about something, head over to our categories and pick one to post in! You can always refer back to a post from Slack Archives if needed; just copy the link to use it as a reference..

Morning and happy new year all! I’ve noticed a strange change in behaviour for customer Yves session

UKEP86J66
UKEP86J66 Posts: 208 🧑🏻‍🚀 - Cadet
edited January 2022 in Help

Morning and happy new year all!
I’ve noticed a strange change in behaviour for customer Yves sessions after upgrading to 2021.08 and wondered if I am missing something. In previous versions the expire time of the session cookie in the browser would update each time a page is accessed, so the cookie would always be valid for 30 minutes after the last page access. Now the cookie expire time does not update which means customers only have 30 minutes to browse and checkout before their basket empties. I’ve replicated this on a fresh B2C install. It looks like this method extendCookieLifetime does not exist in the new application plugin https://github.com/spryker/session/blob/master/src/Spryker/Yves/Session/Plugin/ServiceProvider/SessionServiceProvider.php#L76

Comments

  • Valerii Trots
    Valerii Trots SRE @ Spryker Sprykee Posts: 1,654 ✨ - Novice

    Hi Rick! The issue is known, there is an internal ticket to fix it that is waiting in the queue.
    It's relatively easy to fix the problem on the project level. Do you need the code sample\assistance here?

  • UKEP86J66
    UKEP86J66 Posts: 208 🧑🏻‍🚀 - Cadet

    Hi Valerii, thanks for the confirmation.

  • UKEP86J66
    UKEP86J66 Posts: 208 🧑🏻‍🚀 - Cadet

    So far I’m adding this to theSessionEventDispatcherPlugin
    and it seems to fix the issue, but if this approach looks incorrect please share 🙂

        public function extend(EventDispatcherInterface $eventDispatcher, ContainerInterface $container): EventDispatcherInterface
        {
            return parent::extend($this->addKernelResponseEventListener($eventDispatcher), $container);
        }
    
        private function addKernelResponseEventListener(
            EventDispatcherInterface $eventDispatcher
        ): EventDispatcherInterface {
            $eventDispatcher->addListener(KernelEvents::RESPONSE, function (ResponseEvent $event) {
                if (!$event->isMasterRequest() || !$event->getRequest()->hasSession()) {
                    return;
                }
    
                $session = $event->getRequest()->getSession();
                if ($session->isStarted()) {
                    $event->getResponse()->headers->setCookie($this->createSessionCookie($session->getName(), $session->getId(), session_get_cookie_params()));
                }
            }, -128);
    
            return $eventDispatcher;
        }
    
  • UKEP86J66
    UKEP86J66 Posts: 208 🧑🏻‍🚀 - Cadet

    This is pretty much what the original code was doing 😇

  • Valerii Trots
    Valerii Trots SRE @ Spryker Sprykee Posts: 1,654 ✨ - Novice

    Clarifying.

  • UKEP86J66
    UKEP86J66 Posts: 208 🧑🏻‍🚀 - Cadet

    Thanks

  • Valerii Trots
    Valerii Trots SRE @ Spryker Sprykee Posts: 1,654 ✨ - Novice
    yes, it should work
    i had little bit different implementation, but in general - the same
    
        protected function addKernelTerminateEventListener(
            EventDispatcherInterface $eventDispatcher
        ): EventDispatcherInterface {
            $eventDispatcher->addListener(KernelEvents::RESPONSE, function (ResponseEvent $event) {
                if (!$event->isMasterRequest() || !$event->getRequest()->hasSession()) {
                    return;
                }
    
                $session = $event->getRequest()->getSession();
                if ($session->isStarted()) {
                    $session->save();
    
                    if (!$this->isSessionCookieSet($session)) {
                        $event->getResponse()->headers->setCookie($this->createSessionCookie($session->getName(), $session->getId(), session_get_cookie_params()));
                    }
                }
            }, static::EVENT_PRIORITY_KERNEL_RESPONSE);
    
            return $eventDispatcher;
        }
    
  • UKEP86J66
    UKEP86J66 Posts: 208 🧑🏻‍🚀 - Cadet

    Thanks @valerii.trots I’ve updated my code to match 👍