lua-resty-cookie

公开 cloudflare/lua-resty-cookie 的核心功能

$ opm get xiangnanscu/lua-resty-cookie

名称

lua-resty-cookie - 此库解析 Nginx 的 HTTP Cookie 头,并返回 cookie 中的每个字段。

状态

此库已准备好投入生产。

概述

        lua_package_path "/path/to/lua-resty-cookie/lib/?.lua;;";
    
        server {
            location /test {
                content_by_lua '
                    local ck = require "resty.cookie"
                    local cookie, err = ck:new()
                    if not cookie then
                        ngx.log(ngx.ERR, err)
                        return
                    end
    
                    -- get single cookie
                    local field, err = cookie:get("lang")
                    if not field then
                        ngx.log(ngx.ERR, err)
                        return
                    end
                    ngx.say("lang", " => ", field)
    
                    -- get all cookies
                    local fields, err = cookie:get_all()
                    if not fields then
                        ngx.log(ngx.ERR, err)
                        return
                    end
    
                    for k, v in pairs(fields) do
                        ngx.say(k, " => ", v)
                    end
    
                    -- set one cookie
                    local ok, err = cookie:set({
                        key = "Name", value = "Bob", path = "/",
                        domain = "example.com", secure = true, httponly = true,
                        expires = "Wed, 09 Jun 2021 10:18:14 GMT", max_age = 50,
                        samesite = "Strict", extension = "a4334aebaec"
                    })
                    if not ok then
                        ngx.log(ngx.ERR, err)
                        return
                    end
    
                    -- set another cookie, both cookies will appear in HTTP response
                    local ok, err = cookie:set({
                        key = "Age", value = "20",
                    })
                    if not ok then
                        ngx.log(ngx.ERR, err)
                        return
                    end
                ';
            }
        }

方法

new

语法:cookie_obj = cookie()

为当前请求创建一个新的 cookie 对象。您可以使用此对象获取从客户端解析的 cookie,或稍后将 cookie 设置为客户端。

get

语法:cookie_val, err = cookie_obj:get(cookie_name)

获取单个客户端 cookie 值。如果出错,则返回nil和错误消息。

get_all

语法:fields, err = cookie_obj:get_all()

获取 lua 表格中所有客户端 cookie 键值对。如果出错,则返回nil和错误消息。

set

    syntax: ok, err = cookie_obj:set({
        key = "Name",
        value = "Bob",
        path = "/",
        domain = "example.com",
        secure = true, httponly = true,
        expires = "Wed, 09 Jun 2021 10:18:14 GMT",
        max_age = 50,
        samesite = "Strict",
        extension = "a4334aebaec"
    })

向客户端设置 cookie。这将添加一个新的 'Set-Cookie' 响应头。keyvalue是必需的,其他所有字段都是可选的。如果同一个 cookie(整个 cookie 字符串,例如“Name=Bob; Expires=Wed, 09 Jun 2021 10:18:14 GMT; Max-Age=50; Domain=example.com; Path=/; Secure; HttpOnly;”)已经设置,则新的 cookie 将被忽略。

安装

您需要使用您的 Nginx 编译ngx_lua

您需要配置lua_package_path指令以将您的lua-resty-cookie源树的路径添加到 ngx_lua 的 Lua 模块搜索路径,如

    # nginx.conf
    http {
        lua_package_path "/path/to/lua-resty-cookie/lib/?.lua;;";
        ...
    }

然后在 Lua 中加载库

    local ck = require "resty.cookie"

作者

Jiale Zhi <vipcalio@gmail.com>,CloudFlare Inc.

Yichun Zhang (agentzh) <agentzh@gmail.com>,CloudFlare Inc.

版权和许可

此模块根据 BSD 许可授权。

版权所有 (C) 2013,由 Jiale Zhi <vipcalio@gmail.com>,CloudFlare Inc.

版权所有 (C) 2013,由 Yichun Zhang <agentzh@gmail.com>,CloudFlare Inc.

保留所有权利。

允许以源代码和二进制形式重新分发和使用,无论是否修改,只要满足以下条件

  • 重新分发源代码必须保留上述版权声明、此条件列表和以下免责声明。

  • 二进制形式的重新分发必须在随分发提供的文档和/或其他材料中复制上述版权声明、此条件列表和以下免责声明。

本软件由版权持有人和贡献者“按现状”提供,任何明示或暗示的保证,包括但不限于对适销性和特定目的适用性的暗示保证均被免除。在任何情况下,版权持有人或贡献者均不对因使用本软件而导致的任何直接、间接、附带、特殊、示例性或后果性损害(包括但不限于采购替代商品或服务的费用;使用、数据或利润损失;或业务中断)负责,无论是在合同、严格责任或侵权(包括疏忽或其他原因)理论下,无论是否已告知此类损害的可能性。

作者

Nan Xiang(@xiangnanscu)

许可证

mit

版本