cookies - 在 Symfony2 中读写 Cookie

标签 cookies symfony

我想在本地浏览器cookie中存储一些信息。经过几个小时寻找一个不错的教程后,我设法将一些数据存储在非 session cookie 中:

Controller - indexAction()

$cookieGuest = array(
    'name'  => 'mycookie',
    'value' => 'testval',
    'path'  => $this->generateUrl('my_route'),
    'time'  => time() + 3600 * 24 * 7
);

$cookie = new Cookie($cookieGuest['name'], $cookieGuest['value'], $cookieGuest['time'], $cookieGuest['path']);

$response = new Response();
$response->headers->setCookie($cookie);
$response->send();

我想知道这是否是正确的方法。此外,我尝试了几种使用 HttpFoundation 组件读取 cookie 的方法,但没有成功。除了通过 $_COOKIE['mycookie'] 访问 cookie 之外,还有其他方法吗?

这是我尝试读取 cookie 的地方

Controller - cookieAction()

public function cookieAction($_locale, $branch, $page) 
{   
    $response = new Response();
    $cookies = $response->headers->getCookies();

    var_dump($cookies);

// TODO: Get params for indexAction from cookie if available

    return $this->indexAction($_locale, $branch, $page);
}

最佳答案

这才是设置cookie的正确方法。 要读取浏览器中已写入的 cookie,请执行以下操作:

$request->cookies->get('myCookie');

但是当我在 $response 对象中创建 cookie 后:

$cookie = new Cookie('myCookie', 'contentOfMyCookie');
$response = new Response();
$response->headers->setCookie($cookie);

我称这个方法为:

$response->headers->getCookies();

我得到了一组cookie,这些cookie将被写入浏览器中 - 而不是那些已经存在的cookie。

打个比方,在$request和$response之间有一个执行 Controller 代码的时间。

此外,在 Twig 模板中您可以使用

{{ app.request.cookies.get('myCookie') }}

因此,您可以获得浏览器中已写入的 cookie 的值,而不是来自 $response 对象的值!从浏览器新创建的 cookie,您只能在重新加载页面后才能读取(ajax 不需要重新加载整个页面)。

总而言之,您可以使用$request对象读取cookie,并使用$response创建它们> 对象。 (显然,由于某些原因,您也可以读取 $response 对象 cookie - 但这些情况相当罕见)。

关于cookies - 在 Symfony2 中读写 Cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7727442/

相关文章:

Javascript Cookie 问题 IE

php - 记住我与 session 超时有何不同

symfony - Vuetify 在 symfony 项目中

php - Symfony 请求 - 获取内部服务器错误

symfony - 如何获取 Symfony2 twig 模板中单个字段的错误?

java - Cookie 能否在浏览器收到它们之前(或确切时间)超时?

angular - Spring Security OAuth2 在 cookie 中存储 access_token

javascript - 使用 cookie 显示 div

phpunit assertNull 损坏了 zend_mm_heap

php - 如何像 Doctrine 2 中的表格一样加入实体?