A PHP session handler backed by MongoDB.
$ composer require altmetric/mongo-session-handler
<?php
use Monolog\Logger; // or any other PSR-3 compliant logger
use Altmetric\MongoSessionHandler;
$sessions = $mongoClient->someDB->sessions;
$logger = new Logger;
$handler = new MongoSessionHandler($sessions, $logger);
session_set_save_handler($handler);
session_set_cookie_params(0, '/', '.example.com', false, true);
session_name('my_session_name');
session_start();
As MongoDB prior to 3.0 does not support document level locking, this session handler operates on a principle of Last Write Wins.
If a user of a session causes two simultaneous writes then you may end up with the following situation:
- Window A reads session value of
['foo' => 'bar']
; - Window B reads session value of
['foo' => 'bar']
; - Window B writes session value of
['foo' => 'baz']
; - Window A writes session value of
['foo' => 'quux']
.
The session will now contain ['foo' => 'quux']
as it was the last successful
write. This may be surprising if you're trying to increment some value in a
session as it is not locked during reads and writes:
- Window A reads session value of
['count' => 0]
; - Window B reads session value of
['count' => 0]
; - Window B writes session value of
['count' => 1]
; - Window A writes session value of
['count' => 1]
.
- Nick Ilyin's
php-mongo-session
served as a valuable existing implementation of MongoDB-backed sessions in PHP.
Copyright © 2015 Altmetric LLP
Distributed under the MIT License.