我想在本地浏览器cookie中存储一些信息.经过几个小时寻找一个很好的教程,我设法将一些数据存储在非会话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();
Run Code Online (Sandbox Code Playgroud)
我想知道这是不是正确的方法.此外,我尝试了几种方法来使用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);
}
Run Code Online (Sandbox Code Playgroud)
Bła*_*cik 72
这是设置cookie的正确方法.要读取已在浏览器中编写的cookie,请执
$request->cookies->get('myCookie');
Run Code Online (Sandbox Code Playgroud)
但是我在$ response对象中创建了cookie之后:
$cookie = new Cookie('myCookie', 'contentOfMyCookie');
$response = new Response();
$response->headers->setCookie($cookie);
Run Code Online (Sandbox Code Playgroud)
我称之为这种方法:
$response->headers->getCookies();
Run Code Online (Sandbox Code Playgroud)
我得到了一系列cookie,这些cookie将在浏览器中编写 - 而不是那些已存在的cookie.
形象地说,在$ request和$ response之间有执行控制器代码的时间.
此外,您可以使用树枝模板
{{ app.request.cookies.get('myCookie') }}
Run Code Online (Sandbox Code Playgroud)
因此,您获得已经在浏览器中编写的cookie的值,而不是来自$ response对象的值!来自浏览器的新创建的cookie只有在重新加载页面后才能读取(ajax不需要重新加载整个页面).
总结一下,您可以使用$ request对象读取cookie,并使用$ response对象创建它们.(显然,出于某些原因,您还可以阅读$ response对象cookie - 但这些情况非常罕见).
Mig*_*elo 17
$response->headers->getCookies();
Run Code Online (Sandbox Code Playgroud)
应该在ResponseHeaderBag类中返回一个cookie数组,以获取有关该函数的更多信息
Edu*_*rdo 17
这对于试图在symfony2中制作cookie的人有用:
use Symfony\Component\HttpFoundation\Cookie;
Run Code Online (Sandbox Code Playgroud)
示例如何使用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');
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
63960 次 |
最近记录: |