导航

  • 索引
  • 下一页 |
  • 上一页 |
  • Varnish version trunk documentation »
  • 《Varnish参考手册》 »
  • VMOD Cookie-Varnish Cookie模块

VMOD Cookie-Varnish Cookie模块¶

SYNOPSIS¶

import cookie [as name] [from "path"]

清理后的空洞()

VOID DELETE(字符串cookiename)

VOID过滤器(字符串过滤器字符串)

VOID FILTER_RE(REGEX表达式)

VOID KEEP(字符串过滤器字符串)

VOID KEEP_RE(REGEX表达式)

字符串FORMAT_DATE(当前时间,持续时间增量)

字符串GET(字符串cookiename)

字符串GET_RE(REGEX表达式)

字符串get_string()

Bool isset(字符串cookiename)

Void parse(字符串cookieHeader)

Void set(字符串cookiename,字符串值)

DESCRIPTION¶

在Varnish VCL中更轻松地处理HTTP Cookie。

将Cookie标头解析到内部数据存储中,其中可以使用每个Cookie的获取/设置/删除功能。Keep()函数删除除一组逗号分隔的Cookie之外的所有Cookie。Filter()函数删除逗号分隔的Cookie列表。

正则表达式可用于选择Cookie、删除匹配的Cookie和删除不匹配的Cookie名称。

还包括用于格式化Set-Cookie Expires Date字段的方便函数。

使用cookie.parse()加载的状态具有当前请求或后端请求上下文的生存期。要将变量传递给后端请求,请将内容存储为伪bereq标头。

过滤示例::

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

清理后的空洞()¶

清理以前解析的Cookie。在正常操作中,不需要运行CLEAN()。

示例::

sub vcl_recv {
    cookie.clean();
}

VOID DELETE(字符串cookiename)¶

删除 cookiename 来自内部vmod存储(如果存在)。

示例::

sub vcl_recv {
    cookie.parse("cookie1=value1; cookie2=value2");
    cookie.delete("cookie2");
    # get_string() will now yield "cookie1=value1"
}

VOID过滤器(字符串过滤器字符串)¶

从内部vmod存储中删除逗号分隔的参数cookiename中的所有cookie。

示例::

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

VOID FILTER_RE(REGEX表达式)¶

从内部vmod存储中删除与正则表达式匹配的所有Cookie expression 。

示例::

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

VOID KEEP(字符串过滤器字符串)¶

从内部vmod存储中删除不在逗号分隔的参数cookiename中的所有cookie。

示例::

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

VOID KEEP_RE(REGEX表达式)¶

从内部vmod存储中删除与表达式不匹配的所有Cookie expression 。

示例::

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

字符串FORMAT_DATE(当前时间,持续时间增量)¶

获取适合包含在Set-Cookie响应头中的RFC1123格式的日期字符串。

如果响应具有多个Set-Cookie标头,则应格外小心。在这种情况下,应该使用头vmod。

示例::

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(字符串cookiename)¶

获取的价值 cookiename 存储在内部vmod存储中。

示例::

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

如果 cookiename 不存在,则 NULL 返回字符串。请注意,一个 NULL 将字符串分配给标头时,会将其转换为空字符串。这意味着以下内容是正确的:

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
}

但是,使用 cookie.isset() 通常是检查是否存在特定Cookie的更好方法,如下所示:

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_RE(REGEX表达式)¶

获取内部vmod存储中与正则表达式匹配的第一个Cookie的值 expression 。如果没有匹配,则 NULL 返回字符串。

示例::

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

字符串get_string()¶

获取内部vmod存储中所有Cookie的Cookie字符串值。不修改内部存储。

示例::

sub vcl_recv {
    cookie.parse(req.http.cookie);
    cookie.keep("SESSIONID,PHPSESSID");
    set req.http.cookie = cookie.get_string();
}

Bool isset(字符串cookiename)¶

检查是否 cookiename 设置在内部vmod存储中。

示例::

import std;
sub vcl_recv {
    cookie.parse("cookie1=value1; cookie2=value2");
    if (cookie.isset("cookie2")) {
        std.log("cookie2 is set.");
    }
}

Void parse(字符串cookieHeader)¶

解析中的Cookie字符串 cookieheader 。如果状态已经存在, clean() 将首先运行。

示例::

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

Void set(字符串cookiename,字符串值)¶

将内部vmod存储设置为 cookiename 至 value 。

示例::

sub vcl_recv {
    cookie.set("cookie1", "value1");
    std.log("cookie1 value is: " + cookie.get("cookie1"));
}

DEPRECATED¶

别名格式_rfc1123()¶

的别名已弃用 format_date() 。

COPYRIGHT¶

This document is licensed under the same conditions as Varnish itself.
See LICENSE for details.

SPDX-License-Identifier: BSD-2-Clause

目录

  • VMOD Cookie-Varnish Cookie模块

上一主题

VMOD BLOB-用于VCL BLOB类型、编码和解码的实用程序

下一主题

VMOD导向器-Varnish导向器模块

快速搜索

导航

  • 索引
  • 下一页 |
  • 上一页 |
  • Varnish version trunk documentation »
  • 《Varnish参考手册》 »
  • VMOD Cookie-Varnish Cookie模块
© 版权所有 2010-2014, Varnish Software AS. 由 Sphinx 7.2.6创建。