Symfony - Cookie 和 Session 管理



Symfony HttpFoundation 元件以面向物件的方式提供 Cookie 和 Session 管理。Cookie 提供客戶端資料儲存,並且僅支援少量資料。通常,每個域為 2KB,具體取決於瀏覽器。Session 提供伺服器端資料儲存,並支援大量資料。讓我們看看如何在 Symfony web 應用中建立 Cookie 和 Session。

Cookie

Symfony 提供 Cookie 類來建立 Cookie 專案。讓我們建立一個名為 color 的 Cookie,其值設定為 blue,並在 24 小時後過期。Cookie 類的建構函式引數如下所示:

  • name (型別:字串) - Cookie 名稱
  • value (型別:字串) - Cookie 值
  • expire (型別:整數/字串/日期時間) - 過期資訊
  • path (型別:字串) - Cookie 可用的伺服器路徑
  • domain (型別:字串) – Cookie 可用的域名地址
  • secure (型別:布林值) - Cookie 是否需要在 HTTPS 連線中傳輸
  • httpOnly (型別:布林值) - Cookie 是否僅在 HTTP 協議中可用
use Symfony\Component\HttpFoundation\Cookie;  
$cookie = new Cookie('color', 'green', strtotime('tomorrow'), '/', 
   'somedomain.com', true, true);

Symfony 還提供以下基於字串的 Cookie 建立選項。

$cookie = Cookie::fromString('color = green; expires = Web, 4-May-2017 18:00:00 +0100; 
path=/; domain = somedomain.com; secure; httponly');

現在,需要將建立的 Cookie 附加到 HTTP 響應物件的 header,如下所示:

$response->headers->setCookie($cookie);

要獲取 Cookie,我們可以使用 Request 物件,如下所示:

$cookie = $request->cookie->get('color'); 

這裡,request->cookie 的型別為 PropertyBag,我們可以使用 PropertyBag 方法操作它。

Session

Symfony 提供了一個實現 SessionInterface 介面的 Session 類。重要的 Session API 如下:

start − 啟動 Session。

Session $session = new Session(); 
$session->start(); 

invalidate − 清除所有 Session 資料並重新生成 Session ID。

set − 使用鍵將資料儲存在 Session 中。

$session->set('key', 'value');

我們可以在 Session 值中使用任何資料,從簡單的整數到複雜的 objects。

get − 使用鍵從 Session 中獲取資料。

$val = $session->get('key');

remove − 從 Session 中刪除一個鍵。

clear − 刪除 Session 資料。

FlashBag

Session 提供了另一個有用的功能,稱為 FlashBag。它是一個特殊的容器,位於 Session 內,僅在頁面重定向期間儲存資料。它在 HTTP 重定向中很有用。在重定向到頁面之前,可以將資料儲存到 FlashBag 中,而不是普通的 Session 容器,並且儲存的資料將在下一個請求(重定向頁面)中可用。然後,資料將自動失效。

$session->getFlashBag()->add('key', 'value');  
$session->getFlashBag()->get('key'); 
廣告