iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 22
1
Modern Web

PHP laravel的邂逅系列 第 22

DAY22-laravel session介紹

DAY22-laravel session介紹

session是什麼東西?

因為HTTP為無狀態的協定,Server和Client不會一直保持連線狀態,可以透過session來儲存資料,例如:一般來說購物車都會看到使用者加入的東西,這是因為session把資料儲存起來了,如果沒有session或是其他儲存機制,每次登入購物車就都會是空的資料或是無法儲存資料。

session在laravel怎麼用?

session在laravel是放在config/session.php這隻檔案中,而裡面有很多選項可供使用,一般情況下,laravel已經預設好了檔案的設定,配置了適用於大多數應用程序的file Session 驅動,在生產環境下,你可以考慮使用memcached或redis驅動來實現更出色的Session性能。

drive的選項中有以下可以立即使用的配置選項

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

  • cookie - Session 保存在安全加密的Cookie 中。

  • database - Session 保存在關係型數據庫中。

  • memcached/ redis- Sessions保存在其中一個快速且基於緩存的存儲系統中。

  • array - Sessions 保存在PHP 數組中,不會被持久化。

獲取數據

Laravel中處理Session數據有兩種主要方法:全局輔助函數session和通過一個Request實例。

class UserController extends Controller
{
    /**
     * 展示给定用户的配置文件
     *
     * @param  Request  $request
     * @param  int  $id
     * @return Response
     */
    public function show(Request $request, $id)
    {
        $value = $request->session()->get('key');

        //
    }
}

session獲取值得時候,還可以傳送一個get的方法,第二個參數為session未取得值,而返回的預設值,或是可以寫成閉包的方式,回傳值也可以

$value = $request->session()->get('key', 'default');

$value = $request->session()->get('key', function () {
    return 'default';
});
全域輔助函數Session

也可以使用全域的PHP函數session來取得或是儲存資料,可以直接在session傳入key值,或是使用物件的方式儲存session。

Route::get('home', function () {
    // 获取 Session 中的一条数据...
    $value = session('key');

    // 指定一个默认值...
    $value = session('key', 'default');

    // 在 Session 中存储一条数据...
    session(['key' => 'value']);
});

獲取所有Session數據

可以使用all方法取得所有session數據

$data = $request->session()->all();
判斷Session中是否存在某個值

可以使用has來判斷值是否有資料,如果有值而且不為null就會是true

if ($request->session()->has('users')) {
    //
}
存儲數據
// 通過 HTTP 請求實例...
$request->session()->put('key', 'value');

// 通過全域輔助函數
session(['key' => 'value']);
刪除數據

forget方法可以從Session內刪除一條數據。如果你想刪除Session內所有數據,可以使用flush方法:

$request->session()->forget('key');

$request->session()->flush();

上一篇
DAY21-laravel tinker 介紹
下一篇
DAY23-laravel Middleware 介紹
系列文
PHP laravel的邂逅30

尚未有邦友留言

立即登入留言