會(huì)話

2018-12-17 10:55 更新

配置

由于 HTTP 協(xié)定是無(wú)狀態(tài)(Stateless)的,所以 session 提供一種保存用戶(hù)數(shù)據(jù)的方法。Laravel 支持了多種 session 后端驅(qū)動(dòng),并通過(guò)清楚、統(tǒng)一的 API 提供使用。也內(nèi)置支持如 MemcachedRedis 和數(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,你需要先通過(guò) Composer 安裝 predis/predis 擴(kuò)展包 (~1.0)。

注意: 如果你需要加密所有的 session 數(shù)據(jù),就將選項(xiàng) encrypt 配置為 true

注意: 當(dāng)你使用 cookie 作為 session 驅(qū)動(dòng)時(shí), 你永遠(yuǎn)不應(yīng)該從 HTTP Kernel 中移除 EncryptCookie 中間件。如果你移除了這個(gè)中間件,你的應(yīng)用容易遭受遠(yuǎn)程代碼攻擊。

保留鍵值

Laravel 框架在內(nèi)部有使用 flash 作為 session 的鍵值,所以應(yīng)該避免 session 使用此名稱(chēng)。

           

使用 Session

獲取 session 有很多種方式,可以通過(guò) HTTP request 類(lèi)的 session 方法,Session facade 或者 session 輔助函數(shù)。如果在調(diào)用 session 輔助函數(shù)時(shí)沒(méi)有傳入?yún)?shù),會(huì)返回整個(gè) session 對(duì)象。比如:

session()->regenerate();

           

保存對(duì)象到 Session 中

Session::put('key', 'value');session(['key' => 'value']);

           

保存對(duì)象進(jìn) Session 數(shù)組值中

Session::push('user.teams', 'developers');

           

從 Session 取回對(duì)象

$value = Session::get('key');$value = session('key');

           

從 Session 取回對(duì)象,若無(wú)則返回默認(rèn)值

$value = Session::get('key', 'default');$value = Session::get('key', function() { return 'default'; });

           

從 Session 取回對(duì)象,并刪除

$value = Session::pull('key', 'default');

           

從 Session 取出所有對(duì)象

$data = Session::all();

           

判斷對(duì)象在 Session 中是否存在

if (Session::has('users')){
    //}

           

從 Session 中移除對(duì)象

Session::forget('key');

           

清空所有 Session

Session::flush();

           

重新產(chǎn)生 Session ID

Session::regenerate();

           

           

暫存數(shù)據(jù)(Flash Data)

有時(shí)你可能希望暫存一些數(shù)據(jù),并只在下次請(qǐng)求有效。你可以使用 Session::flash 方法來(lái)達(dá)成目的:

Session::flash('key', 'value');

           

刷新當(dāng)前暫存數(shù)據(jù),延長(zhǎng)到下次請(qǐng)求

Session::reflash();

           

只刷新指定快閃數(shù)據(jù)

Session::keep(['username', 'email']);

           

           

數(shù)據(jù)庫(kù) Sessions

當(dāng)使用 database session 驅(qū)動(dòng)時(shí),你必需建置一張保存 session 的數(shù)據(jù)表。下方例子使用 Schema 來(lái)建表:

Schema::create('sessions', function($table){
    $table->string('id')->unique();
    $table->text('payload');
    $table->integer('last_activity');});

           

當(dāng)然你也可以使用 Artisan 命令 session:table 來(lái)建 migration 表:

php artisan session:table

composer dump-autoload

php artisan migrate

           

           

Session 驅(qū)動(dòng)

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ù)。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)