
travis.crowder at spechal
Nov 18, 2011, 9:35 PM
Post #5 of 6
(534 views)
Permalink
|
Sorry, vcl_fetch() should be vcl_recv() ... I copy/pasted only the relevant parts and typed out the scopes. :\ On 11/18/2011 11:33 PM, Travis Crowder wrote: > On 11/18/2011 2:55 PM, Jim Hayter wrote: >> Travis wrote: >> > Sorry if this is on the ineternet somewhere, but I have yet to >> find it. >> >> > Can Varnish set a cookie? >> >>> In example, if a user on a mobile device goes to xyz.com, Varnish >>> sees a >>> mobile user agent and redirects them to m.xyz.com via the vcl_error >>> section. Before or after the redirect, can Varnish set a cookie >>> without >>> the application doing so? >>> Thanks, >>> Travis >> I'm running varnish 2.0.5 but would not expect the syntax to have >> changed much. >> The obj part may no longer be what is used, I believe the current >> versions use beresp. >> >> I use the code below in vcl_fetch. >> If (test for setting cookie) { >> set obj.http.Set-Cookie = "use_mobile_dev=yes; >> domain=.<xxxxxxxx>.com; path=/"; >> } >> >> This works for the limited case where I need it. I don't remember >> the impact if any >> Set-Cookie headers already exist. >> >> Jim > > Thank you! > > I am using this for mobile detection in case it can help anyone else. > It checks for either device=mobile or device=desktop in the query > string. It works with = or / to be diverse in case my developers > decide to change it to use device/desktop or device/mobile in the future. > > vcl_fetch(){ > # if they are accessing device/desktop, pass > if(req.url ~ "device(=|/)desktop") { > if(req.http.Cookie ~ "view_type=mobile"){ > error 306 req.http.Host; > } > return(pass); > } elseif (req.url ~ "device(=|/)mobile" && req.http.Cookie ~ > "view_type=desktop") { > error 305 req.http.host; > } > if(req.http.Cookie !~ "view_type" && req.http.Host !~ "^m\.") { > if ( > req.http.User-Agent ~ "iPad" || > req.http.User-Agent ~ "iP(hone|od)" || > req.http.User-Agent ~ "Android" || > req.http.User-Agent ~ "SymbianOS" || > req.http.User-Agent ~ "^BlackBerry" || > req.http.User-Agent ~ "^SonyEricsson" || > req.http.User-Agent ~ "^Nokia" || > req.http.User-Agent ~ "^SAMSUNG" || > req.http.User-Agent ~ "^LG") { > # Varnish can't really do redirects, so we > will error out > # and have the error handler do the redirect > error 305 req.http.host; > } > } > } > > vcl_error() { > if (obj.status == 305){ > set obj.http.Set-Cookie = "view_type=mobile; expires: > Session; path=/; domain=." obj.response; > set obj.http.Location = "http://m." obj.response; > set obj.status = 302; > return(deliver); > } > if (obj.status == 306) { > set obj.http.Set-Cookie = "view_type=desktop; expires: > Session; path=/; domain=." obj.response; > set obj.http.Location = "http://" obj.response; > set obj.status = 302; > } > > } > > _______________________________________________ > varnish-misc mailing list > varnish-misc [at] varnish-cache > https://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc _______________________________________________ varnish-misc mailing list varnish-misc [at] varnish-cache https://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc
|