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?
2. Where is the quote ID stored during checkout?
3. What is the purpose of step data providers?
Flashcards
Question
What is CheckoutSession?
Click to reveal answer
Answer
Model that manages current quote, quote ID, and checkout state during the checkout process
Question
Where is quote_id stored?
Click to reveal answer
Answer
In the session via core_session table
Question
What are step data providers?
Click to reveal answer
Answer
Classes that supply config data (shipping/payment methods) to checkout steps
Question
How to get quote from session?
Click to reveal answer
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