鍍金池/ 教程/ PHP/ Session
Laravel Cashier
Eloquent ORM
HTTP 響應(yīng)
發(fā)行說明
擴(kuò)展包開發(fā)
HTTP 控制器
事件
擴(kuò)展框架
Contracts
開發(fā)
配置
表單驗(yàn)證
錯(cuò)誤與日志
Hashing
貢獻(xiàn)指南
郵件
Session
遷移與數(shù)據(jù)填充
查詢構(gòu)造器
Redis
升級(jí)向?qū)?/span>
概覽
緩存
服務(wù)提供者
Envoy 任務(wù)執(zhí)行器
隊(duì)列
單元測(cè)試
服務(wù)容器
文件系統(tǒng) / 云存儲(chǔ)
認(rèn)證
請(qǐng)求的生命周期
加密
模板
視圖 (View)
Laravel Homestead
Laravel 安裝指南
介紹
Command Bus
分頁(yè)
輔助方法
應(yīng)用程序結(jié)構(gòu)
HTTP 路由
HTTP 請(qǐng)求
基本用法
本地化
HTTP 中間件
結(jié)構(gòu)生成器
Facades
Laravel Elixir

Session

配置

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

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

保留鍵值

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

使用 Session

獲取 session 有很多種方式,可以通過 HTTP request 類的session 方法,Session facade 或者session 輔助函數(shù)。如果在調(diào)用session 輔助函數(shù)時(shí)沒有傳入?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ì)象,若無則返回默認(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 方法來達(dá)成目的:

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

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

Session::reflash();

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

Session::keep(array('username', 'email'));

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

當(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 驅(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ù)。

上一篇:認(rèn)證