Lumen框架已經(jīng)剔除了session的默認(rèn)支持,但是我們?nèi)匀豢梢宰约禾砑觭ession功能,這一切都得益于強(qiáng)大的Laravel及Composer。
Lumen5.2 的Release Notes中官方明確的指出Lumen專注于構(gòu)建無狀態(tài)API,JSON API 服務(wù),移除了session和view的支持,但其實(shí)view還是存在的,session確實(shí)真的被移除了
因?yàn)轫?xiàng)目需要所以我決定找回session,雖然官方建議需要session功能時可以使用強(qiáng)大的Laravel框架,但是對我小項(xiàng)目確實(shí)有點(diǎn)大材小用了。因?yàn)橄矚gLaravel的優(yōu)雅,所以我在小項(xiàng)目中都會把Lumen做為項(xiàng)目的首選。
下面就來一步步找回“丟失”的session吧!
注冊SessionServiceProvider
打開bootstrap/app.php,在相應(yīng)位置添加注冊SessionServiceProvider,代碼如下
// bootstrap/app.php
// ...
/*
|--------------------------------------------------------------------------|
Register Service Providers
|--------------------------------------------------------------------------|
...
|*/
// ...
// 注冊 SessionServiceProvider
$app->register(Illuminate\Session\SessionServiceProvider::class);
// ...
添加session相關(guān)配置所需配置
同樣在bootstrap/app.php中添加配置代碼
// bootstrap/app.php
// ...
// 注冊 SessionServiceProvider
$app->register(Illuminate\Session\SessionServiceProvider::class);
// 載入session相關(guān)配置
$app->configure('session');
configure函數(shù)會從文件中加載配置,并綁定到container中,接下來只需要在項(xiàng)目根目錄創(chuàng)建config文件夾,并新建session.php配置文件
<?php
// config/session.php
// 這里直接從laravel中copy過來了,并且使用了file驅(qū)動,當(dāng)然你也可以使用其他驅(qū)動,詳細(xì)配置請查閱laravel官方文檔
return [
'driver' => env('SESSION_DRIVER', 'file'),//默認(rèn)使用file驅(qū)動,你可以在.env中配置
'lifetime' => 120,//緩存失效時間
'expire_on_close' => false,
'encrypt' => false,
'files' => storage_path('framework/session'),//file緩存保存路徑
'connection' => null,
'table' => 'sessions',
'lottery' => [2, 100],
'cookie' => 'laravel_session',
'path' => '/',
'domain' => null,
'secure' => false,
];
然后在storage/framework/下建立session文件夾用來存儲session緩存,別忘了修改權(quán)限
注冊StartSession中間件
打開bootstrap/app.php,在Register Middleware位置修改
// bootstrap/app.php
// ...
|--------------------------------------------------------------------------
| Register Middleware
|--------------------------------------------------------------------------
// ...
$app->middleware([
Illuminate\Session\Middleware\StartSession::class
]);
添加Session別名
因?yàn)榭蚣苤惺褂昧藄ession別名,所以需要添加alias,不然會報錯
// bootstrap/app.php
// ...
// 注冊 SessionServiceProvider
$app->register(Illuminate\Session\SessionServiceProvider::class);
// 載入session相關(guān)配置
$app->configure('session');
// 設(shè)置session別名
$app->alias('session', 'Illuminate\Session\SessionManager');
使用session
至此,你就可以在代碼中使用session了,使用 app('session') 即可獲取session實(shí)例,示例:
// 寫入一條數(shù)據(jù)至 session 中...
app('session')->put('key','value');
// 獲取session中鍵值未key的數(shù)據(jù)
app('session')->get('key');
有關(guān)session的詳細(xì)用法可查閱Laravel官方文檔
ps:session輔助函數(shù)
// session輔助函數(shù)
if (! function_exists('session')) {
function session($key = null, $default = null)
{
$session = app('session');
if (is_null($key)) {
return $session;
}
if (is_array($key)) {
return $session->put($key);
}
return $session->get($key, $default);
}
}
輔助函數(shù)可以讓你更方便的使用session