由於 HTTP 協定是無狀態(Stateless)的,所以 session 提供一種儲存用戶資料的方法。Laravel 支援了多種 session 後端驅動,並透過清楚、統一的 API 提供使用。也內建支援像是 Memcached、Redis 和資料庫的後端驅動。
session 的設定檔配置在 config/session.php
中,請務必看一下 session 設定檔中可用的選項設定及註解。Laravel 預設使用 file
的 session 驅動,它在大多的應用中可以良好運作。
如果你想在 Laravel 中使用 Redis
sessions,你需要先透過 Composer 安裝 predis/predis
套件 (~1.0)。
注意: 如果你需要加密所有的 session 資料,就將選項
encrypt
設定為true
。
Laravel 框架在內部有使用 flash
作為 session 的鍵值,所以應該避免 session 使用此名稱。
Session::put('key', 'value');
Session::push('user.teams', 'developers');
$value = Session::get('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();
有時你可能希望暫存一些資料,並只在下次請求有效。你可以使用 Session::flash
方法來達成目的:
Session::flash('key', 'value');
Session::reflash();
Session::keep(array('username', 'email'));
當使用 database
session 驅動時,你必需建置一張儲存 session 的資料表。下方範例使用 Schema
來建表:
Schema::create('sessions', function($table)
{
$table->string('id')->unique();
$table->text('payload');
$table->integer('last_activity');
});
當然你也可以使用 Artisan 指令 session:table
來建 migration 表:
php artisan session:table
composer dump-autoload
php artisan migrate
session 設定檔中的「driver」定義了 session 資料將以哪種方式被儲存。Laravel 提供了許多良好的驅動:
file
- sessions 將儲存在 app/storage/sessions
。cookie
- sessions 將安全儲存在加密的 cookies 中。database
- sessions 將儲存在你的應用程式資料庫中memcached
/ redis
- sessions 將儲存在一個高速快取的系統中。array
- sessions 將單純的以 PHP 陣列儲存,只存活在當次請求。注意: array 驅動典型應用在 unit tests 環境下,所以不會留下任何 session 資料。