Подтвердить что ты не робот

Чтение и запись файлов cookie в Symfony2

Я хочу сохранить некоторую информацию в локальном браузере. После нескольких часов поиска хорошего учебника мне удалось сохранить некоторые данные в несеансовом файле cookie:

контроллер - 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

контроллер - 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);
}
4b9b3361

Ответ 1

$response->headers->getCookies();

должен вернуть массив файлов cookie в класс ResponseHeaderBag для получения дополнительной информации об этой функции

Ответ 2

Это правильный способ настройки файла cookie. Чтобы прочитать файл cookie, уже написанный в браузере, выполните следующие действия:

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

Но после того, как я создал файл cookie в объекте $response:

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

Я вызываю этот метод:

$response->headers->getCookies();

Я получаю массив куки файлов, которые должны быть написаны в браузере, а не те, которые уже существуют.

Образно, между $request и $response существует время выполнения кода контроллера.

Кроме того, в шаблоне ветки можно использовать

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

вы получаете значение cookie, уже написанного в браузере, а не из объекта $response! Недавно созданный cookie из браузера вы можете читать только после перезагрузки страницы (ajax не нужно перезагружать целую страницу).

Подводя итог, вы можете читать файлы cookie с помощью объекта $request и создавать их с помощью объекта $response. (Очевидно, по некоторым причинам вы также можете прочитать куки файлов ответов $response - но это довольно редкие ситуации).

Ответ 3

это может быть полезно для тех, кто пытается сделать файлы cookie в symfony2:

use Symfony\Component\HttpFoundation\Cookie;

Ответ 4

Пример использования файлов cookie и сеанса:

<?php

namespace AppBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Cookie;
use Symfony\Component\HttpFoundation\Response;

class DefaultController extends Controller
{
    public function indexAction()
    {
        // Set session value
        $session = $this->getRequest()->getSession();
        $session->set('test', 1);

        // Get session value
        $value = $session->get('test');

        // Set cookie value
        $response = new Response();
        $cookie = new Cookie('test', 1, time()+3600);
        $response->headers->setCookie($cookie);

        // Get cookie value
        $this->getRequest()->cookies->get('test');
    }
}

Ответ 6

            use Symfony\Component\HttpFoundation\Cookie;
            use Symfony\Component\HttpFoundation\Response;

            // set current active tab in cookie 
            $cookie = new Cookie('myProfileActiveTab', 'myaddress', strtotime('now + 60 minutes'));
            $response = new Response();
            $response->headers->setCookie($cookie);
            $response->send();


           // get current active tab from cookies
           $cookies = $request->cookies;
           if ($cookies->has('myProfileActiveTab')) {
               $activetab = $cookies->get('myProfileActiveTab');
           }