由于 HTTP 協(xié)定是無狀態(tài)(Stateless)的,所以 session 提供一種保存用戶數(shù)據(jù)的方法。Laravel 支持了多種 session 后端驅(qū)動(dòng),并通過清楚、統(tǒng)一的 API 提供使用。也內(nèi)置支持如Memcached、Redis 和數(shù)據(jù)庫(kù)的后端驅(qū)動(dòng)。
session 的配置文件配置在config/session.php
中,請(qǐng)務(wù)必看一下 session 配置文件中可用的選項(xiàng)配置及注釋。Laravel 默認(rèn)使用file
的 session 驅(qū)動(dòng),它在大多的應(yīng)用中可以良好運(yùn)作。
如果你想在 Laravel 中使用Redis
sessions,你需要先通過 Composer 安裝predis/predis
擴(kuò)展包 (~1.0)。
注意: 如果你需要加密所有的 session 數(shù)據(jù),就將選項(xiàng)
encrypt
配置為true
。
Laravel 框架在內(nèi)部有使用flash
作為 session 的鍵值,所以應(yīng)該避免 session 使用此名稱。
獲取 session 有很多種方式,可以通過 HTTP request 類的session
方法,Session
facade 或者session
輔助函數(shù)。如果在調(diào)用session
輔助函數(shù)時(shí)沒有傳入?yún)?shù),會(huì)返回整個(gè) session 對(duì)象。比如:
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();
有時(shí)你可能希望暫存一些數(shù)據(jù),并只在下次請(qǐng)求有效。你可以使用Session::flash
方法來達(dá)成目的:
Session::flash('key', 'value');
Session::reflash();
Session::keep(array('username', 'email'));
當(dāng)使用database
session 驅(qū)動(dòng)時(shí),你必需建置一張保存 session 的數(shù)據(jù)表。下方例子使用Schema
來建表:
Schema::create('sessions', function($table)
{
$table->string('id')->unique();
$table->text('payload');
$table->integer('last_activity');
});
當(dāng)然你也可以使用 Artisan 命令session:table
來建 migration 表:
php artisan session:table
composer dump-autoload
php artisan migrate
session 配置文件中的「driver」定義了 session 數(shù)據(jù)將以哪種方式被保存。Laravel 提供了許多良好的驅(qū)動(dòng):
file
- sessions 將保存在storage/framework/sessions
。cookie
- sessions 將安全保存在加密的 cookies 中。database
- sessions 將保存在你的應(yīng)用程序數(shù)據(jù)庫(kù)中。memcached
/redis
- sessions 將保存在一個(gè)高速緩存的系統(tǒng)中。array
- sessions 將單純的以 PHP 數(shù)組保存,只存活在當(dāng)次請(qǐng)求。注意: array 驅(qū)動(dòng)典型應(yīng)用在unit tests 環(huán)境下,所以不會(huì)留下任何 session 數(shù)據(jù)。