📜  Symfony-Cookie和会话管理

📅  最后修改于: 2020-10-19 03:20:32             🧑  作者: Mango


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

曲奇饼

Symfony提供了Cookie类来创建cookie项目。让我们创建一个cookie颜色,该颜色将在24小时后失效,其值为blue 。 cookie类的构造函数参数如下。

  • 名称(类型:字符串)-cookie名称
  • 值(类型:字符串)-Cookie值
  • 到期(类型:整数/字符串/日期时间)-到期信息
  • path(type: 字符串)-cookie可用的服务器路径
  • 域(类型:字符串)– cookie可用的域地址
  • 安全(类型:布尔值)-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-> cookie的类型为PropertyBag ,我们可以使用PropertyBag方法进行操作。

届会

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

启动-启动会话。

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

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

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

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

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

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

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

删除-从会话的关键。

清除-删除会话数据。

FlashBag

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

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