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'); 
广告