PHP Laravel - Session 及 Cookie 應用與介紹 - 筆記長也NotesHazuya

PHP Laravel - Session 及 Cookie 應用與介紹

2020-06-06 01:51:43   Laravel

Session 與 Cookie 是什麼?

HTTP 是一個無狀態通訊協定,每一次連線都是新的工作階段,所以如果要儲存資料要使用 Session 或是 Cookie,例如將一個商品放入購物車,當你刷新頁面或轉跳到其他頁面時卻還能看到購物車的商品,這時候就是用 Session 或者 Cookie 儲存的。

Session V.S. Cookie

Session 是儲存在伺服器端,而 Cookie 是儲存在使用者的瀏覽器中。

設定 Session

開始之前,一樣先到 .env 去設定有關 Session 的項目~

SESSION_DRIVER=file
SESSION_LIFETIME=120

SESSION_DRIVER

選擇 Session 存在何處, DRIVER可用的參數有:

  • file - 將Session保存為檔案,存在 storage/framework/sessions 中。

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

  • database - 將 Session 保存在關聯資料庫中。

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

  • array - 將Sessions 保存在PHP 陣列中,不會被持久化。

SESSION_LIFETIME

設定 Session 的生命週期。

儲存 Session

在 laravel 當中, Session 可以透過全域方法 session() 或是 Request 實例來操作。

// 全域方法
session(['username' => 'data']);
//Request 實例
$request->session()->put('username', 'data');

取得 Session

// 全域方法
session('username', 'default');
// Request 實例
$request->session()->get('username', 'default');

如果是空的,可以給予預設值。

判斷 Session 是否存在

// request 實例
if ($request->session()->has('username')) {
    //
}

這個方法只有在 request 實例當中有,如果你使用 session() 方法可以直接取出判斷值是否存在。

刪除所有 Session

// 全域方法
session()->flush()
// Request 實例
$request->session()->flush();

刪除特定 Session

//全域方法
session()->forget('username')
// Request 實例
$request->session()->forget('username');

儲存 Cookie

Cookie 使用前基本上不用設定,但記得引入命名空間!

use Illuminate\Support\Facades\Cookie;
Cookie::queue('hi', 'Hello', 30);

這個方法可以不必搭配 response 來使用,他會自動回傳 cookie。

但請別忘記 Cookie 是隨著 response 一起回傳的,因為 Cookie 儲存於使用者的瀏覽器。

刪除 Cookie

Cookie::queue(Cookie::forget('asd'));

未雜湊的 Cookie

laravel 預設的 cookie 都是被雜湊過的

如果要不雜湊 cookie ,可以修改 app/Http/Middleware/EncryptCookies.php 的 $except 屬性,將 cookie 的 key 寫進去即可。

class EncryptCookies extends Middleware
{
    /**
     * The names of the cookies that should not be encrypted.
     *
     * @var array
     */
    protected $except = [
        'asd'
    ];
}

再次重設 Cookie 時,就可以看到 Cookie 以明文的方式儲存了。

Session 及 Cookie 是網頁程式設計中很常用到的兩種東西,大致上介紹到這裡。下一篇文章會介紹 GET 、POST 方法取值。


長也

我只專注做好自己能做的事情,別人要做什麼我無法干涉。