New

Just launched: Vueblocks, a brand-new search engine for Vue packages! Explore Vueblocks →

rairlie/laravel-locking-session

Provide session locking in Laravel
528,322 91
Install
composer require rairlie/laravel-locking-session
Latest Version:v2.0.1
PHP:>=7.4
Laravel:5 – 10
License:MIT
Last Updated:Jan 27, 2026
Links: GitHub  ·  Packagist
Maintainer: rairlie

laravel-locking-session

This package implements session locking in Laravel by wrapping an exclusive lock around the underlying session driver. As such it should work with any session backend - cookies, files, database, etc. (only files and cookies currently tested).

It addresses the problem where session data is lost due to concurrent requests updating the session at the same time. One instance where this may happen is when making simultaneous XHR requests.

Example scenario:

Consider the case where a variable COUNTER is a value stored in the session, and two requests attempt to increment it at the same time. Without session locking:

Request A: Read session data: COUNTER = 1
Request B: Read session data: COUNTER = 1
Request A: COUNTER = COUNTER + 1
Request B: COUNTER = COUNTER + 1
Request A: Write session data: COUNTER = 2
Request B: Write session data: COUNTER = 2

Final result: COUNTER = 2

With session locking in place, this becomes:

Request A: Lock session
Request A: Read session data: COUNTER = 1
Request B: Attempt to lock session - already locked, must wait
Request A: COUNTER = COUNTER + 1
Request A: Write session data: COUNTER = 2
Request A: Release lock
Request B: Acquires lock
Request B: Read session data: COUNTER = 2
Request B: COUNTER = COUNTER + 1
Request B: Write session data: COUNTER = 3
Request B: Release lock

Final result: COUNTER = 3

Session locking ensures correctness at the cost of effectively serialising concurrent requests accessing the session. If you have some concurrent requests that don't use the session, disabling session middleware on those requests allows them to still be concurrent.

Installation

composer require rairlie/laravel-locking-session

In your Laravel app, edit config/app.php and replace the default session handler with the locking one:

config/app.php:
- Illuminate\Session\SessionServiceProvider::class,
+ Rairlie\LockingSession\LockingSessionServiceProvider::class,

By default, lock files are written to the system temp dir, in a subdir 'sessionlocks'. You can specify an alternative path with:

config/session.php:
'lockfile_dir' => '/path/to/my/lockdir'

The directory will be created if it doesn't exist.

Requirements

  1. Write access to the lock dir
  2. POSIX file system locking e.g. *NIX, Windows (untested).

Compatibility

Laravel Locking Session Version PHP Version
2.x >=7.4
1.x 5.5 - 8.1

Related Packages

cedricve/lockfile

A session driver which properly locks the file session driver for Laravel

13,119 2
codezero/session

Manage session data.

2,821 0
polass/message

A message class for alerts of Bootstrap in Laravel

57 0
oryxcloud/laravel-dynamodb-session-driver

DynamoDB Session Driver for Laravel 5

61,425 14
customergauge/session

Native PHP Session adapter for Laravel Authentication

42,307 9

Version History

Version Released PHP Laravel License
v2.0.1 >=7.4 >=5.0 MIT
v2.0.0 >=7.4 >=5.0 MIT
v1.1.9 >=5.5.9 >=5.0 MIT
v1.1.8 >=5.5.9 >=5.0 MIT
v1.1.7 >=5.5.9 >=5.0 MIT