Vra

Ek is nie seker of ek die regte vraag vra nie. Ek het 'n vernis -sitplek voor 'n webwerf wat toegang tot talle koekies het. Die belangrikste is Creds Cookie. Wat ek doen, is om al die koekies wat ek nie nodig het, te strooi nie, en kyk of enige koekie oor is. As dit die geval is, beteken dit dat ons vernis omseil, anders stuur die kasvoorwerp terug.

  # Remove all cookies that Drupal doesn't need to know about. We explicitly 
  # list the ones that Drupal does need, the SESS , NO_CACHE and credential cookie namely  auth 
  #. If, after running this code we find that either of these two cookies remains, we 
  # will pass as the page cannot be cached.
  if (req.http.Cookie) {
    # 1. Append a semi-colon to the front of the cookie string.
    # 2. Remove all spaces that appear after semi-colons.
    # 3. Match the cookies we want to keep, adding the space we removed 
    #    previously back. (\1) is first matching group in the regsuball.
    # 4. Remove all other cookies, identifying them by the fact that they have
    #    no space after the preceding semi-colon.
    # 5. Remove all spaces and semi-colons from the beginning and end of the 
    #    cookie string. 
    set req.http.Cookie = ";" + req.http.Cookie;
    set req.http.Cookie = regsuball(req.http.Cookie, "; +", ";");    
    set req.http.Cookie = regsuball(req.http.Cookie, ";(SESS[a-z0-9]+|SSESS[a-z0-9]+|NO_CACHE+|auth)=", "; \1=");
    set req.http.Cookie = regsuball(req.http.Cookie, ";[^ ][^;]*", "");
    set req.http.Cookie = regsuball(req.http.Cookie, "^[; ]+|[; ]+$", "");

    if (req.http.Cookie == "") {
      # If there are no remaining cookies, remove the cookie header. If there
      # aren't any cookie headers, Varnish's default behavior will be to cache
      # the page.
      unset req.http.Cookie;
    }
    else {
      # If there is any cookies left (a session or NO_CACHE cookie), do not
      # cache the page. Pass it on to Apache directly.
      return (pass);
    }
  }
}

Dit werk goed. Ek kry 'n kasmis wanneer auth Koekie is daar en 'n treffer anders. Selfs as dit 'n mis is, blyk dit dat vernis die versoek deurgee sonder die res van die koekies wat op die versoek gekom het. Is daar 'n manier om vernis te rig om die oorspronklike Cooke te slaag?

Miskien iets soos

else {
  # If there is any cookies left (a session or NO_CACHE cookie), do not
  # cache the page. Pass it on to Apache directly.
  # And set the cookie to its original form ??
  return (pass);
}
Was dit nuttig?

Oplossing

U kan oorspronklike koekie kopieer voordat u dit ontleed en dit herstel else Stelling, Soment soos:

  # ....
  # Store original cookie in other headder
  set req.http.X-Cookie = req.http.Cookie;
  if (req.http.Cookie) {
    # ... 
    set req.http.Cookie = ";" + req.http.Cookie;
    set req.http.Cookie = regsuball(req.http.Cookie, "; +", ";");    
    set req.http.Cookie = regsuball(req.http.Cookie, ";(SESS[a-z0-9]+|SSESS[a-z0-9]+|NO_CACHE+|auth)=", "; \1=");
    set req.http.Cookie = regsuball(req.http.Cookie, ";[^ ][^;]*", "");
    set req.http.Cookie = regsuball(req.http.Cookie, "^[; ]+|[; ]+$", "");

    if (req.http.Cookie == "") {
      # ....
      # Delete cookie copy
      unset req.http.X-Cookie;
      unset req.http.Cookie;
    }
    else {
      # ...
      # Restore original cookie and delete the copy
      set req.http.Cookie = req.http.X-Cookie;
      unset req.http.X-Cookie;
      return (pass);
    }
  }
}
Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top