Symfony - Cookies 和 Session 管理
Symfony HttpFoundation 组件以面向对象的方式提供 cookie 和 session 管理。Cookie 提供客户端数据存储,仅支持少量数据。通常,每个域为 2KB,具体取决于浏览器。Session 提供服务器端数据存储,支持大量数据。让我们看看如何在 Symfony Web 应用程序中创建 cookie 和 session。
Cookie
Symfony 提供 Cookie 类来创建 cookie 项。让我们创建一个 cookie 颜色,其值为 blue,将在 24 小时内过期。 cookie类的构造函数参数如下。
- name (type: string) - cookie名称
- value (type: string) - cookie值
- expire (type: integer / string / datetime) - 过期信息
- path (type: string) - cookie所在的服务器路径
- domain (type: string) – cookie所在的域名地址
- secure (type: boolean) - cookie是否需要在HTTPS连接中传输
- httpOnly (type: 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 方法对其进行操作。
Session
Symfony 提供了一个实现 SessionInterface 接口的 Session 类。重要的会话 API 如下,
start − 启动会话。
Session $session = new Session(); $session->start();
invalidate −清除所有会话数据并重新生成会话 ID。
set − 使用密钥将数据存储在会话中。
$session->set('key', 'value');
我们可以在会话值中使用任何数据,无论是简单的整数还是复杂的对象。
get − 使用密钥从会话中获取数据。
$val = $session->get('key');
remove − 从会话中删除密钥。
clear − 删除会话数据。
FlashBag
Session 提供了另一个有用的功能,称为 FlashBag。它是会话内的一个特殊容器,仅在页面重定向期间保存数据。它在 http 重定向中很有用。在重定向到页面之前,可以将数据保存在 FlashBag 中,而不是普通的会话容器中,保存的数据将在下一个请求(重定向页面)中可用。然后,数据将自动失效。
$session->getFlashBag()->add('key', 'value'); $session->getFlashBag()->get('key');