Skip to content
intermediate Phase 46 · Checkout Implementation

Checkout Session

CheckoutSession model, session data, step management, and persistence in Magento checkout

45m
0 problems
Topic Progress 0%

CheckoutSession Model

CheckoutSession Overview

// Magento\Checkout\Model\Session
namespace Magento\Checkout\Model;

class Session
{
    /**
     * Get current quote
     */
    public function getQuote(): \Magento\Quote\Model\Quote
    {
        if (!$this->quote) {
            $this->quote = $this->quoteRepository->get(
                $this->getQuoteId()
            );
        }
        return $this->quote;
    }

    /**
     * Get quote ID from session
     */
    public function getQuoteId(): ?int
    {
        return $this->checkoutSession->getQuoteId();
    }

    /**
     * Set quote ID in session
     */
    public function setQuoteId(int $quoteId): self
    {
        $this->checkoutSession->setQuoteId($quoteId);
        return $this;
    }

    /**
     * Get last order ID
     */
    public function getLastOrderId(): ?int
    {
        return $this->checkoutSession->getLastOrderId();
    }
}

Session Data Structure

// Session stores checkout state
$sessionData = [
    'quote_id' => 123,
    'last_order_id' => 456,
    'last_success_order_id' => 456,
    'display_thankyou_page' => true,
    'redirect_needed' => true,
];

Step Management

Checkout Steps Configuration

<!-- Magento\Checkout\etc\frontend\di.xml -->
<config>
    <virtualType name="CheckoutStepsProvider" type="Magento\Checkout\Model\CompositeConfigProvider">
        <arguments>
            <argument name="configProviders" xsi:type="array">
                <item name="customer" xsi:type="object">Magento\Checkout\Model\ConfigProvider\Customer</item>
                <item name="oneshipping" xsi:type="object">Magento\Checkout\Model\ConfigProvider\OneShipping</item>
            </argument>
        </arguments>
    </virtualType>
</config>

Step Data Providers

// Step data providers supply config to checkout steps
namespace Magento\Checkout\Model\ConfigProvider;

class ShippingMethodConfigProvider implements \Magento\Checkout\Model\ConfigProviderInterface
{
    public function getConfig(): array
    {
        return [
            'shipping' => [
                'shippingMethods' => $this->getShippingMethods(),
            ],
        ];
    }

    private function getShippingMethods(): array
    {
        // Return available shipping methods
        return [
            [
                'carrier' => 'flatrate',
                'method' => 'flatrate',
                'carrier_title' => 'Flat Rate',
                'method_title' => 'Fixed',
                'price' => 5.00,
            ],
        ];
    }
}

Step State Management

// JavaScript step management (KnockoutJS)
// Magento\Checkout\view\frontend\web\js\model\checkout-data.js

checkoutData.setShippingAddressFromData = function(data) {
    saveData(
        {
            shippingAddressData: data
        },
        'shipping-address-data'
    );
};

// Step completion tracking
var stepNavigator = {
    steps: ko.observableArray([
        { code: 'shipping', title: 'Shipping', isComplete: ko.observable(false) },
        { code: 'review', title: 'Review & Payments', isComplete: ko.observable(false) },
    ]),
    navigateTo: function(stepCode) {
        // Navigate to specific step
    }
};

Session Persistence

Session Storage

// Checkout session is stored in core_session table
CREATE TABLE core_session (
    session_id VARCHAR(255),
    session_data TEXT,
    updated_at TIMESTAMP
);

// Quote ID is stored in session
$session->setQuoteId($quoteId);

// Retrieve later
$quoteId = $session->getQuoteId();

Guest Session Handling

namespace Magento\Checkout\Model\Session;

class GuestSessionHandler
{
    public function __construct(
        private \Magento\Framework\Session\SessionManagerInterface $session
    ) {}

    public function getOrCreateQuote(): \Magento\Quote\Model\Quote
    {
        $quoteId = $this->session->getQuoteId();

        if ($quoteId) {
            try {
                return $this->quoteRepository->get($quoteId);
            } catch (\Exception $e) {
                // Quote not found, create new
            }
        }

        return $this->createNewQuote();
    }

    private function createNewQuote(): \Magento\Quote\Model\Quote
    {
        $quote = $this->quoteFactory->create();
        $quote->setStoreId($this->storeManager->getStore()->getId());
        $quote->setIsActive(1);
        $quote->save();

        $this->session->setQuoteId($quote->getId());

        return $quote;
    }
}

Quiz

1. What does CheckoutSession primarily manage?

Question 1 options

2. Where is the quote ID stored during checkout?

Question 2 options

3. What is the purpose of step data providers?

Question 3 options

Flashcards

Question

What is CheckoutSession?

Answer

Model that manages current quote, quote ID, and checkout state during the checkout process

Question

Where is quote_id stored?

Answer

In the session via core_session table

Question

What are step data providers?

Answer

Classes that supply config data (shipping/payment methods) to checkout steps

Question

How to get quote from session?

Answer

$checkoutSession->getQuote()

Revision Notes

Key Takeaways

  • 1. CheckoutSession manages the active quote and checkout state
  • 2. Quote ID is persisted in the session across requests
  • 3. Step data providers supply configuration to checkout UI components
  • 4. Guest and customer sessions handle quote creation differently
  • 5. Session data includes quote ID, last order ID, and checkout flags

Interview Tips

  • Explain how session maintains checkout state across page loads
  • Describe the role of CheckoutSession vs the Quote model
  • Discuss how step data providers feed configuration to KnockoutJS

Cheat Sheet

CheckoutSession:
  getQuote() → current quote
  getQuoteId() → stored quote ID
  setQuoteId($id) → save to session

Step Management:
  ConfigProviders supply method lists
  stepNavigator tracks completion
  CheckoutData saves step state

Persistence:
  core_session table stores session data
  quote_id links session to quote