Since HTTP driven applications are stateless, sessions provide a way to store information about the user across requests. Lumen, like Laravel, ships with a variety of session back-ends available for use through a clean, unified API. Support for popular back-ends such as Memcached, Redis, and databases is included out of the box.
The session driver is controlled by the SESSION_DRIVER
configuration option in your .env
file. By default, Lumen is configured to use the memcached
session driver, which will work well for the majority of applications.
Note: If you are using the
.env
file to configure your application, don't forget to uncomment theDotenv::load()
method in yourbootstrap/app.php
file.
Before using Redis sessions with Lumen, you will need to install the predis/predis
package (~1.0) and illuminate/redis
package (~5.0) via Composer.
The Lumen framework uses the flash
session key internally, so you should not add an item to the session by that name.
Note: Before using sessions, you must uncomment the middleware within the
$app->middleware()
method call in yourbootstrap/app.php
file.
The session may be accessed in several ways, via the HTTP request's session
method, the Session
facade, or the session
helper function. When the session
helper is called without arguments, it will return the entire session object. For example:
session()->regenerate();
Session::put('key', 'value');
session(['key' => 'value']);
Session::push('user.teams', 'developers');
$value = Session::get('key');
$value = session('key');
$value = Session::get('key', 'default');
$value = Session::get('key', function() { return 'default'; });
$value = Session::pull('key', 'default');
$data = Session::all();
if (Session::has('users')) {
//
}
Session::forget('key');
Session::flush();
Session::regenerate();
Sometimes you may wish to store items in the session only for the next request. You may do so using the Session::flash
method:
Session::flash('key', 'value');
Session::reflash();
Session::keep(['username', 'email']);
When using the database
session driver, you will need to setup a table to contain the session items. Below is an example Schema
declaration for the table:
Schema::create('sessions', function($table)
{
$table->string('id')->unique();
$table->text('payload');
$table->integer('last_activity');
});
The session "driver" defines where session data will be stored for each request. Lumen, like Laravel, ships with several great drivers out of the box:
file
- sessions will be stored instorage/framework/sessions
.cookie
- sessions will be stored in secure, encrypted cookies.database
- sessions will be stored in a database used by your application.memcached
/redis
- sessions will be stored in one of these fast, cached based stores.array
- sessions will be stored in a simple PHP array and will not be persisted across requests.