acfo / session
Simple session class with strict typing, read only and lazy load support
Requires
- php: >=7.1.0
- psr/http-message: ^1.0
Requires (Dev)
- php-mock/php-mock: ^2.0
- php-mock/php-mock-phpunit: ^2.0
- phpunit/phpunit: ^6.3
- squizlabs/php_codesniffer: 2.*
This package is not auto-updated.
Last update: 2024-10-27 05:04:27 UTC
README
#Session
Simple strict typed session class which supports read only (read_and_close) and lazy loading. This package also provides a useful PSR-7 compatible middleware, e.g. for the Slim Framework 3.x, for starting a session.
###Installation
composer require acfo/session
###Usage
Add the session class an middleware to your dependency injection container (e.g. Pimple):
$container[\Acfo\Session\Session::class] = function () { return new \Acfo\Session\SessionImpl(); }; $container[\Acfo\Session\Middleware\Slim3\SessionMiddleware] = function ($container) { return new \Acfo\Session\Middleware\Slim3\SessionMiddleware( $container->get(\Acfo\Session\Session::class) ); };
Add middleware (e.g. Slim 3.x):
$app->add(\Acfo\Session\Middleware\Slim3\SessionMiddleware::class);
This setup will allow read and write operations and not start the session before it is actually used, e.g.:
$session = $container->get(\Acfo\Session\Session::class); $value = $session->get('key'); // lazy load: first access will invoke start_session $session->set('key', 1234); $session->regenerate(); $session->delete('key'); $session->deleteAll(); $session->close(); // call close if you want to end a read/write session as soon as possible.
###Advanced usage
The session class supports starting the session with the read_and_close flag introduced with PHP 7.0. This feature can help keep the time a session is locked for a specific user to the necessary minimum. This is especially useful for asynchronous web applications which generally do not write data in a GET-Request.
To specify which requests only need read access to the session data, pass a list of objects implementing the ReadOnlySessionStrategy interface as a parameter of the the middleware constructor, e.g.:
class GetRequestReadOnlySessionStrategy implements ReadOnlySessionStrategy { public function isReadOnly(ServerRequestInterface $request): bool { return $request->getMethod() == 'GET'; } } $container[\Acfo\Session\Middleware\Slim3\SessionMiddleware] = function ($container) { $readOnlySessionStrategies = [ new GetRequestReadOnlySessionStrategy() ]; return new \Acfo\Session\Middleware\Slim3\SessionMiddleware( $container->get(\Acfo\Session\Session::class), $readOnlySessionStrategies ); }; $app->add(\Acfo\Session\Middleware\Slim3\SessionMiddleware::class);
The default settings for sessions are suitable for most applications. Should you need to adjust a setting, the most efficient way would be to edit the php.ini file. If you cannot or do not want to edit the php.ini file you can pass a list of settings to the SessionMiddleware.
$settings = \Acfo\Session\Middleware\Slim3\SessionMiddleware::RECOMMENDED_SETTINGS; $container[\Acfo\Session\Middleware\Slim3\SessionMiddleware] = function ($container) { $settings = \Acfo\Session\Middleware\Slim3\SessionMiddleware::RECOMMENDED_SETTINGS; return new \Acfo\Session\Middleware\Slim3\SessionMiddleware( $container->get(\Acfo\Session\Session::class), null, $settings ); }; $app->add(\Acfo\Session\Middleware\Slim3\SessionMiddleware::class);
Enjoy!