Symfony Cookies和会话管理


Symfony HttpFoundation组件以面向对象的方式提供cookie和会话管理。 Cookie 提供客户端数据存储,并且仅支持少量数据。通常,每个域为2KB,取决于浏览器。 会话 提供服务器端数据存储并支持大量数据。让我们看看如何在Symfony Web应用程序中创建cookie和会话。

Cookie

Symfony提供了Cookie类来创建一个cookie项目。让我们创建一个cookie颜色,该颜色在24小时内过期,价值为 蓝色 。cookie类的构造函数参数如下。

  • 名称(类型:字符串) - cookie名称
  • value(type:string) - cookie值
  • 过期(类型:整数/字符串/日期时间) - 过期信息
  • path(type:string) - cookie可用的服务器路径
  • 域(类型:字符串) - 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响应对象的标头。

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

要获取cookie,我们可以使用Request对象,如下所示。

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

这里, request- > cookiePropertyBag 类型的,我们可以使用PropertyBag方法来操作它。

会议

Symfony提供了一个实现SessionInterface接口的Session类。重要的会话API如下,

开始 - 开始会话。

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

无效 - 清除所有会话数据并重新生成会话ID。

set - 使用密钥在会话中存储数据。

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

我们可以使用会话值中的任何数据,以简单的整数表示复杂的对象。

get - 使用密钥从会话中获取数据。

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

删除 - 从会话中删除密钥。

清除 - 删除会话数据。

FlashBag

会话提供了另一个称为 FlashBag的 有用功能。它是仅在页面重定向期间保持数据的会话内的特殊容器。这在http重定向中很有用。在重定向到页面之前,可以将数据保存在FlashBag中而不是正常会话容器中,并且保存的数据将在下一个请求(重定向页面)中可用。然后,数据将自动失效。

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