Laravel Tutorials

Livewire Session Properties for Persistent Component State

Published
Livewire Session Properties for Persistent Component State image

Maintaining component data across page refreshes becomes straightforward with Livewire's session properties. This feature stores component state in the user's session automatically, eliminating the need for manual session handling.

Session properties in Livewire store component data in the user's session using a simple attribute annotation. The #[Session] attribute handles session storage and retrieval automatically.

use Livewire\Component;
use Livewire\Attributes\Session;
 
class ProductFilter extends Component
{
#[Session]
public $category = '';
 
#[Session]
public $priceRange = [];
 
public function applyFilters()
{
$this->dispatch('filters-updated');
}
 
public function render()
{
return view('livewire.product-filter');
}
}

The #[Session] attribute manages all session operations internally. When a user applies filters and refreshes the page, their selections persist without additional implementation.

An e-commerce checkout process demonstrates how session properties maintain cart state throughout the shopping workflow:

use Livewire\Component;
use Livewire\Attributes\Session;
 
class ShoppingCart extends Component
{
#[Session]
public $items = [];
 
#[Session]
public $shippingMethod = 'standard';
 
#[Session]
public $couponCode = '';
 
public function addItem($productId, $quantity = 1)
{
$this->items[$productId] = [
'quantity' => $quantity,
'price' => Product::find($productId)->price,
];
}
 
public function updateShipping($method)
{
$this->shippingMethod = $method;
$this->calculateTotals();
}
 
public function applyCoupon()
{
if ($this->validateCoupon($this->couponCode)) {
$this->dispatch('coupon-applied');
}
}
 
protected function calculateTotals()
{
return collect($this->items)->sum(fn($item) => $item['price'] * $item['quantity']);
}
 
public function render()
{
return view('livewire.shopping-cart', [
'total' => $this->calculateTotals(),
]);
}
}

Session properties support custom keys for more control over storage organization:

use Livewire\Component;
use Livewire\Attributes\Session;
 
class UserPreferences extends Component
{
#[Session(key: 'user-theme')]
public $theme = 'light';
 
#[Session(key: 'dashboard-layout')]
public $layout = 'grid';
 
public function switchTheme()
{
$this->theme = $this->theme === 'light' ? 'dark' : 'light';
}
 
public function render()
{
return view('livewire.user-preferences');
}
}

Dynamic session keys enable context-aware storage based on component properties:

use Livewire\Component;
use Livewire\Attributes\Session;
use App\Models\Project;
 
class ProjectSettings extends Component
{
public Project $project;
 
#[Session(key: 'project-settings-{project.id}')]
public $configuration = [];
 
public function mount(Project $project)
{
$this->project = $project;
}
 
public function updateConfiguration($key, $value)
{
$this->configuration[$key] = $value;
}
 
public function render()
{
return view('livewire.project-settings');
}
}

This approach creates unique session keys for each project, preventing configuration conflicts when users work with multiple projects.

Session properties maintain component state through page refreshes and browser navigation. The automatic persistence removes friction from multi‑step processes while providing developers with a maintainable solution for state management.

Harris Raftopoulos photo

Senior Software Engineer • Staff & Educator @ Laravel News • Co-organizer @ Laravel Greece Meetup

Sponsored

serpapi logo
SerpApi

The Web Search API for Your LLM and AI Applications

Visit SerpApi

The latest

View all →
Volker Dusch on the PHP RCE Vulnerabilities and Disclosure image

Volker Dusch on the PHP RCE Vulnerabilities and Disclosure

Read article
Decide with Jev: Turn AI Answers into Decisions with PHP Rules image

Decide with Jev: Turn AI Answers into Decisions with PHP Rules

Read article
Skuul: Open-Source School Management Built on Laravel image

Skuul: Open-Source School Management Built on Laravel

Read article
Laravel Read Replicas: Prevent Stale Reads After a Write image

Laravel Read Replicas: Prevent Stale Reads After a Write

Read article
Screenshot: Capture Images and PDFs with PHP and Laravel image

Screenshot: Capture Images and PDFs with PHP and Laravel

Read article
Reset Sticky Database Connections Between Laravel Queue Jobs image

Reset Sticky Database Connections Between Laravel Queue Jobs

Read article