GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
VMOD_COOKIE(3) VMOD_COOKIE(3)

vmod_cookie - Varnish Cookie Module

import cookie [as name] [from "path"]
VOID clean()
VOID delete(STRING cookiename)
VOID filter(STRING filterstring)
VOID filter_re(REGEX expression)
VOID keep(STRING filterstring)
VOID keep_re(REGEX expression)
STRING format_date(TIME now, DURATION timedelta)
STRING get(STRING cookiename)
STRING get_re(REGEX expression)
STRING get_string()
BOOL isset(STRING cookiename)
VOID parse(STRING cookieheader)
VOID set(STRING cookiename, STRING value)


Handle HTTP cookies more easily in Varnish VCL.

Parses a cookie header into an internal data store, where per-cookie get/set/delete functions are available. A keep() function removes all but a set comma-separated list of cookies. A filter() function removes a comma- separated list of cookies.

Regular expressions can be used for either selecting cookies, deleting matching cookies and deleting non-matching cookie names.

A convenience function for formatting the Set-Cookie Expires date field is also included.

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.

Filtering example:

import cookie;
sub vcl_recv {
    if (req.http.cookie) {
        cookie.parse(req.http.cookie);
        # Either delete the ones you want to get rid of:
        cookie.delete("cookie2");
        # or delete all but a few:
        cookie.keep("SESSIONID,PHPSESSID");
        # Store it back into req so it will be passed to the backend.
        set req.http.cookie = cookie.get_string();
        # If empty, unset so the builtin VCL can consider it for caching.
        if (req.http.cookie == "") {
            unset req.http.cookie;
        }
    }
}


Clean up previously parsed cookies. It is not necessary to run clean() in normal operations.

Example:

sub vcl_recv {
    cookie.clean();
}


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";
}


Delete all cookies from internal vmod storage that are in the comma-separated argument cookienames.

Example:

sub vcl_recv {
    cookie.parse("cookie1: value1; cookie2: value2; cookie3: value3");
    cookie.filter("cookie1,cookie2");
    # get_string() will now yield
    # "cookie3: value3";
}


Delete all cookies from internal vmod storage that matches the regular expression expression.

Example:

sub vcl_recv {
    cookie.parse("cookie1: value1; cookie2: value2; cookie3: value3");
    cookie.filter_re("^cookie[12]$");
    # get_string() will now yield
    # "cookie3: value3";
}


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.keep("cookie1,cookie2");
    # get_string() will now yield
    # "cookie1: value1; cookie2: value2;";
}


Delete all cookies from internal vmod storage that does not match expression expression.

Example:

sub vcl_recv {
    cookie.parse("cookie1: value1; cookie2: value2; cookie3: value3");
    cookie.keep_re("^cookie[12]$");
    # get_string() will now yield
    # "cookie1: value1; cookie2: value2;";
}


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_date(now, 5m) + "; httpOnly";
}


Get the value of cookiename, as stored in internal vmod storage.

Example:

import std;
sub vcl_recv {
    cookie.parse("cookie1: value1; cookie2: value2;");
    std.log("cookie1 value is: " + cookie.get("cookie1"));
}


If cookiename does not exist, the NULL string is returned. Note that a NULL string is converted to an empty string when assigned to a header. This means that the following is correct:

if (req.http.Cookie) {
        cookie.parse(req.http.Cookie);
        set req.http.X-tmp = cookie.get("a_cookie");
} else {
        set req.http.X-tmp = "";
}
if (req.http.X-tmp != "") {
        // do something with the X-tmp header...
} else {
        // fallback case
}


However, using cookie.isset() is often a better way to check if a particular cookie is present, like this:

unset req.http.X-tmp; # unnecessary if no fallback is needed
if (req.http.Cookie) {
        cookie.parse(req.http.Cookie);
        if (cookie.isset("a_cookie")) {
                set req.http.X-tmp = cookie.get("a_cookie");
                # do something with the X-tmp header...
        }
}
# if necessary, do something when a_cookie is not there
if (!req.http.X-tmp) {
        # fallback case
}


Get the value of the first cookie in internal vmod storage that matches the regular expression expression. If nothing matches, the NULL string is returned.

Example:

import std;
sub vcl_recv {
    cookie.parse("cookie1: value1; cookie2: value2;");
    std.log("cookie1 value is: " + cookie.get_re("^cookie1$"));
}


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.keep("SESSIONID,PHPSESSID");
    set req.http.cookie = cookie.get_string();
}


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 the cookie string in cookieheader. If state already exists, clean() will be run first.

Example:

sub vcl_recv {
    cookie.parse(req.http.Cookie);
}


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"));
}


Deprecated alias for format_date().

This document is licensed under the same conditions as Varnish itself.
See LICENSE for details.
SPDX-License-Identifier: BSD-2-Clause



Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.