# Session - [Configuration](#configuration) - [Session Usage](#session-usage) - [Flash Data](#flash-data) - [Database Sessions](#database-sessions) - [Session Drivers](#session-drivers) ## Configuration Since HTTP driven applications are stateless, sessions provide a way to store information about the user across requests. 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](http://memcached.org), [Redis](http://redis.io), and databases is included out of the box. The session configuration is stored in `config/session.php`. Be sure to review the well documented options available to you in this file. By default, Laravel is configured to use the `file` session driver, which will work well for the majority of applications. Before using Redis sessions with Laravel, you will need to install the `predis/predis` package (~1.0) via Composer. > **Note:** If you need all stored session data to be encrypted, set the `encrypt` configuration option to `true`. > **Note:** When using the `cookie` session driver, you should **never** remove the `EncryptCookie` middleware from your HTTP kernel. If you remove this middleware, your application will be vulnerable to remote code injection. #### Reserved Keys The Laravel framework uses the `flash` session key internally, so you should not add an item to the session by that name. ## Session Usage 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(); #### Storing An Item In The Session Session::put('key', 'value'); session(['key' => 'value']); #### Push A Value Onto An Array Session Value Session::push('user.teams', 'developers'); #### Retrieving An Item From The Session $value = Session::get('key'); $value = session('key'); #### Retrieving An Item Or Returning A Default Value $value = Session::get('key', 'default'); $value = Session::get('key', function() { return 'default'; }); #### Retrieving An Item And Forgetting It $value = Session::pull('key', 'default'); #### Retrieving All Data From The Session $data = Session::all(); #### Determining If An Item Exists In The Session if (Session::has('users')) { // } #### Removing An Item From The Session Session::forget('key'); #### Removing All Items From The Session Session::flush(); #### Regenerating The Session ID Session::regenerate(); ## Flash Data 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'); #### Reflashing The Current Flash Data For Another Request Session::reflash(); #### Reflashing Only A Subset Of Flash Data Session::keep(['username', 'email']); ## Database Sessions 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'); }); Of course, you may use the `session:table` Artisan command to generate this migration for you! php artisan session:table composer dump-autoload php artisan migrate ## Session Drivers The session "driver" defines where session data will be stored for each request. Laravel ships with several great drivers out of the box: - `file` - sessions will be stored in `storage/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. > **Note:** The array driver is typically used for running [unit tests](/docs/{{version}}/testing), so no session data will be persisted.