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
[email protected]
https://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc
_______________________________________________
varnish-misc mailing list
[email protected]
https://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc