會話

2018-12-17 10:55 更新

配置

由于 HTTP 協(xié)定是無狀態(tài)(Stateless)的,所以 session 提供一種保存用戶數(shù)據(jù)的方法。Laravel 支持了多種 session 后端驅動,并通過清楚、統(tǒng)一的 API 提供使用。也內置支持如 Memcached、Redis 和數(shù)據(jù)庫的后端驅動。

session 的配置文件配置在 config/session.php 中,請務必看一下 session 配置文件中可用的選項配置及注釋。Laravel 默認使用 file 的 session 驅動,它在大多的應用中可以良好運作。

如果你想在 Laravel 中使用 Redis sessions,你需要先通過 Composer 安裝 predis/predis 擴展包 (~1.0)。

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

注意: 當你使用 cookie 作為 session 驅動時, 你永遠不應該從 HTTP Kernel 中移除 EncryptCookie 中間件。如果你移除了這個中間件,你的應用容易遭受遠程代碼攻擊。

保留鍵值

Laravel 框架在內部有使用 flash 作為 session 的鍵值,所以應該避免 session 使用此名稱。

           

使用 Session

獲取 session 有很多種方式,可以通過 HTTP request 類的 session 方法,Session facade 或者 session 輔助函數(shù)。如果在調用 session 輔助函數(shù)時沒有傳入?yún)?shù),會返回整個 session 對象。比如:

session()->regenerate();

           

保存對象到 Session 中

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

           

保存對象進 Session 數(shù)組值中

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

           

從 Session 取回對象

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

           

從 Session 取回對象,若無則返回默認值

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

           

從 Session 取回對象,并刪除

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

           

從 Session 取出所有對象

$data = Session::all();

           

判斷對象在 Session 中是否存在

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

           

從 Session 中移除對象

Session::forget('key');

           

清空所有 Session

Session::flush();

           

重新產生 Session ID

Session::regenerate();

           

           

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

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

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

           

刷新當前暫存數(shù)據(jù),延長到下次請求

Session::reflash();

           

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

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

           

           

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

當使用 database session 驅動時,你必需建置一張保存 session 的數(shù)據(jù)表。下方例子使用 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 驅動

session 配置文件中的「driver」定義了 session 數(shù)據(jù)將以哪種方式被保存。Laravel 提供了許多良好的驅動:

  • file - sessions 將保存在 storage/framework/sessions。

  • cookie - sessions 將安全保存在加密的 cookies 中。

  • database - sessions 將保存在你的應用程序數(shù)據(jù)庫中。

  • memcached / redis - sessions 將保存在一個高速緩存的系統(tǒng)中。

  • array - sessions 將單純的以 PHP 數(shù)組保存,只存活在當次請求。

注意: array 驅動典型應用在 unit tests 環(huán)境下,所以不會留下任何 session 數(shù)據(jù)。


以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號