sesiones guardar eliminar ejemplos datos como chrome celular borrar _cookie php cookies varnish varnish-vcl

guardar - ejemplos de sesiones y cookies en php



Barniz: cómo almacenar en caché por separado las páginas según el valor de una cookie específica (1)

Administro un sitio que tiene una única cookie, que debemos usar, pero siempre será uno de los 9 valores (incluido el valor). Me gustaría utilizar el barniz delante de nuestros servidores de aplicaciones, con barniz almacenando en caché por separado una versión de cada página en función del valor de la cookie.

Entonces, si tenemos page / page1, Varnish debe administrar por separado una copia de lo que / page1 se ve con los valores de cookie a, b, c, d, etc.

Supongamos que tenemos mucha memoria en el servidor Varnish para gestionar el almacenamiento de todas las páginas con todas las combinaciones de cookies.

Hemos probado muchas configuraciones de VCL pero no sabemos exactamente cómo hacer que esto funcione. Varnish también debe enviar esa cookie específica a nuestro servidor de aplicaciones, por lo que nuestra aplicación sabe qué contenido enviar.

¡Gracias por adelantado!


Es bastante sencillo de lograr que, de hecho, debe agregar un vcl_hash personalizado:

sub vcl_hash { #... /* Hash cookie data */ # As requests with same URL and host can produce diferent results when issued with different cookies, # we need to store items hashed with the associated cookies. Note that cookies are already sanitized when we reach this point. if (req.http.Cookie) { /* Include cookie in cache hash */ hash_data(req.http.Cookie); } #... }

Con este código, barnizar almacenará una cookie diferente, para cada valor de cookie ... pero también recomendaré que desinfecte sus cookies en vcl_recv , este es un extracto de [1] que contiene sanitización de cookies para sitios de Drupal:

sub vcl_recv { #... # Remove all cookies that backend doesn''t need to know about. # See https://www.varnish-cache.org/trac/wiki/VCLExampleRemovingSomeCookies if (req.http.Cookie) { /* Warning: Not a pretty solution */ /* Prefix header containing cookies with '';'' */ set req.http.Cookie = ";" + req.http.Cookie; /* Remove any spaces after '';'' in header containing cookies */ set req.http.Cookie = regsuball(req.http.Cookie, "; +", ";"); /* Prefix cookies we want to preserve with one space */ /* ''S{1,2}ESS[a-z0-9]+'' is the regular expression matching a Drupal session cookie ({1,2} added for HTTPS support) */ /* ''NO_CACHE'' is usually set after a POST request to make sure issuing user see the results of his post */ /* Keep in mind we should add here any cookie that should reach the backend such as splahs avoiding cookies */ set req.http.Cookie = regsuball(req.http.Cookie, ";(S{1,2}ESS[a-z0-9]+|NO_CACHE|OATMEAL|CHOCOLATECHIP)=", "; /1="); /* Remove from the header any single Cookie not prefixed with a space until next '';'' separator */ set req.http.Cookie = regsuball(req.http.Cookie, ";[^ ][^;]*", ""); /* Remove any ''; '' at the start or the end of the header */ set req.http.Cookie = regsuball(req.http.Cookie, "^[; ]+|[; ]+$", ""); if (req.http.Cookie == "") { /* If there are no remaining cookies, remove the cookie header. */ unset req.http.Cookie; } } #... }

[1] https://github.com/NITEMAN/varnish-bites/blob/master/varnish3/drupal-base.vcl