table of contents
VMOD_COOKIE(3) | VMOD_COOKIE(3) |
NAME¶
vmod_cookie - Varnish Cookie ModuleSYNOPSIS¶
import cookie [from "path"] ;DESCRIPTION¶
Handle HTTP cookies easier in Varnish VCL. (without regex)Parses a cookie header into an internal data store, where per-cookie get/set/delete functions are available. A filter_except() method removes all but a set comma-separated list of cookies.
A convenience function for formatting the Set-Cookie Expires date field is also included. If there are multiple Set-Cookie headers vmod-header should be used.
The state loaded with cookie.parse() has a lifetime of the current request or backend request context. To pass variables to the backend request, store the contents as fake bereq headers.
CONTENTS¶
- func_clean
- func_delete
- func_filter_except
- func_format_rfc1123
- func_get
- func_get_string
- func_isset
- func_parse
- func_set
clean¶
VOID clean(PRIV_TASK)
- Description
- Clean up previously parsed cookies. It is not necessary to run clean() in normal operations.
- Example
sub vcl_recv { cookie.clean(); }
delete¶
VOID delete(PRIV_TASK, STRING cookiename)
- Description
- Delete cookiename from internal vmod storage if it exists.
- Example
sub vcl_recv { cookie.parse("cookie1: value1; cookie2: value2;"); cookie.delete("cookie2"); // get_string() will now yield "cookie1: value1"; }
filter_except¶
VOID filter_except(PRIV_TASK, STRING filterstring)
- Description
- Delete all cookies from internal vmod storage that is not in the comma-separated argument cookienames.
- Example
sub vcl_recv { cookie.parse("cookie1: value1; cookie2: value2; cookie3: value3"); cookie.filter_except("cookie1,cookie2"); // get_string() will now yield // "cookie1: value1; cookie2: value2;"; }
format_rfc1123¶
STRING format_rfc1123(TIME now, DURATION timedelta)
- Description
- Get a RFC1123 formatted date string suitable for inclusion in a Set-Cookie
response header.
Care should be taken if the response has multiple Set-Cookie headers. In that case the header vmod should be used.
- Example
sub vcl_deliver { # Set a userid cookie on the client that lives for 5 minutes. set resp.http.Set-Cookie = "userid=" + req.http.userid + "; Expires=" + cookie.format_rfc1123(now, 5m) + "; httpOnly"; }
get¶
STRING get(PRIV_TASK, STRING cookiename)
- Description
- Get the value of cookiename, as stored in internal vmod storage. If cookiename does not exist an empty string is returned.
- Example
import std; sub vcl_recv { cookie.parse("cookie1: value1; cookie2: value2;"); std.log("cookie1 value is: " + cookie.get("cookie1")); }
get_string¶
STRING get_string(PRIV_TASK)
- Description
- Get a Cookie string value with all cookies in internal vmod storage. Does not modify internal storage.
- Example
sub vcl_recv { cookie.parse(req.http.cookie); cookie.filter_except("SESSIONID,PHPSESSID"); set req.http.cookie = cookie.get_string(); }
isset¶
BOOL isset(PRIV_TASK, STRING cookiename)
- Description
- Check if cookiename is set in the internal vmod storage.
- Example
import std; sub vcl_recv { cookie.parse("cookie1: value1; cookie2: value2;"); if (cookie.isset("cookie2")) { std.log("cookie2 is set."); } }
parse¶
VOID parse(PRIV_TASK, STRING cookieheader)
- Description
- Parse the cookie string in cookieheader. If state already exists, clean() will be run first.
- Example
sub vcl_recv { cookie.parse(req.http.Cookie); }
set¶
VOID set(PRIV_TASK, STRING cookiename, STRING value)
- Description
- Set the internal vmod storage for cookiename to value.
- Example
sub vcl_recv { cookie.set("cookie1", "value1"); std.log("cookie1 value is: " + cookie.get("cookie1")); }