Skip to content

Instantly share code, notes, and snippets.

@lsmith77
Created November 15, 2012 14:22
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save lsmith77/4078842 to your computer and use it in GitHub Desktop.
Save lsmith77/4078842 to your computer and use it in GitHub Desktop.
stripping cookies for caching when using the Symfony2 HttpCache
<?php
require_once __DIR__.'/AppKernel.php';
use Symfony\Bundle\FrameworkBundle\HttpCache\HttpCache;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
class AppCache extends HttpCache
{
private $cookieWhitelist = array(
'MYCOOKIE'
);
protected function lookup(Request $request, $catch = false)
{
$this->removeUnusedCookies($request);
return parent::lookup($request, $catch);
}
protected function store(Request $request, Response $response)
{
$this->removeUnusedCookies($request, $response);
parent::store($request, $response);
}
private function removeUnusedCookies(Request $request, Response $response = null)
{
$cookie = $request->headers->get('cookie');
if (empty($cookie)) {
return;
}
preg_match_all('/(?P<names>[^=]+)=(?P<values>[^\;]+)(;\s)?/im', $cookie, $cookieParts);
$cookie = array();
foreach ($cookieParts['names'] as $key => $value) {
if (in_array($value, $this->cookieWhitelist)) {
$cookie[] = $value.'='.$cookieParts['values'][$key];
}
}
if (empty($cookie)) {
$request->headers->remove('cookie');
} else {
$request->headers->set('cookie', implode(';', $cookie));
}
if ($response instanceof Response) {
foreach ($response->headers->getCookies() as $cookie) {
$name = $cookie->getName();
if (!in_array($name, $this->cookieWhitelist)) {
$response->headers->removeCookie($name);
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment