Symfony - Cookie 和会话管理


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

曲奇饼

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

  • name(类型:字符串)- cookie 名称
  • value (类型:字符串) - cookie 值
  • expire (类型: 整数/字符串/日期时间) - 过期信息
  • path (type: string) - cookie 可用的服务器路径
  • 域(类型:字符串)– cookie 可用的域地址
  • secure (type: boolean) - cookie是否需要在HTTPS连接中传输
  • httpOnly (类型:boolean) - 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如下:

start - 启动会话。

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

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

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

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

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

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

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

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

clear - 删除会话数据。

闪光包

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

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