VMOD cookie — Модуль куки Varnish
КРАТКОЕ ОПИСАНИЕ
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)
ОПИСАНИЕ
Упрощенная работа с HTTP-куки в Varnish VCL.
Разбирает заголовок куки в внутренний хранилище данных, где доступны функции получения/установки/удаления куки. Функция keep() удаляет все куки, кроме указанных в виде запятой-разделенного списка. Функция filter() удаляет куки из запятой-разделенного списка.
Регулярные выражения могут использоваться для выбора куки, удаления совпадающих куки и удаления куки с несовпадающими именами.
Включена удобная функция для форматирования даты поля Set-Cookie Expires.
Состояние, загруженное с помощью 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;
}
}
}
ПУСТОЕ clean()
Очистка ранее обработанных куки. В обычной работе вызывать clean() не нужно.
Пример:
sub vcl_recv {
cookie.clean();
}
ПУСТОЕ filter(СТРОКА filterstring)
Удаляет все куки из внутреннего хранилища vmod, имена которых присутствуют в запятой-разделенном аргументе cookienames.
Пример:
sub vcl_recv {
cookie.parse("cookie1=value1; cookie2=value2; cookie3=value3");
cookie.filter("cookie1,cookie2");
# get_string() will now yield "cookie3=value3"
}
ПУСТОЕ filter_re(REGEX выражение)
Удаляет все куки из внутреннего хранилища vmod, имена которых соответствуют регулярному выражению expression.
Пример:
sub vcl_recv {
cookie.parse("cookie1=value1; cookie2=value2; cookie3=value3");
cookie.filter_re("^cookie[12]$");
# get_string() will now yield "cookie3=value3"
}
ПУСТОЕ keep(СТРОКА filterstring)
Удаляет все куки из внутреннего хранилища vmod, имена которых отсутствуют в запятой-разделенном аргументе cookienames.
Пример:
sub vcl_recv {
cookie.parse("cookie1=value1; cookie2=value2; cookie3=value3");
cookie.keep("cookie1,cookie2");
# get_string() will now yield "cookie1=value1; cookie2=value2"
}
ПУСТОЕ keep_re(REGEX выражение)
Удаляет все куки из внутреннего хранилища vmod, имена которых не соответствуют выражению 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(ВРЕМЯ now, ДЛИТЕЛЬНОСТЬ timedelta)
Возвращает строку даты в формате RFC1123, подходящую для включения в заголовок ответа Set-Cookie.
Следует быть внимательным, если в ответе несколько заголовков 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_re(REGEX выражение)
Возвращает значение первой куки во внутреннем хранилище vmod, соответствующей регулярному выражению 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. Не изменяет внутреннее хранилище.
Пример:
sub vcl_recv {
cookie.parse(req.http.cookie);
cookie.keep("SESSIONID,PHPSESSID");
set req.http.cookie = cookie.get_string();
}
УСТАРЕВШЕЕ
ПСЕВДОНИМ format_rfc1123()
Устаревший псевдоним для format_date().
АВТОРСКИЕ ПРАВА
This document is licensed under the same conditions as Varnish itself. See LICENSE for details. SPDX-License-Identifier: BSD-2-Clause
Copyright © 2006 Verdens Gang AS
Copyright © 2006–2020 Varnish Software AS
Licensed under the BSD-2-Clause License.
https://varnish-cache.org/docs/7.4/reference/vmod_cookie.html