Nginx 获取 cookie 中的值

Posted by Sunday on 2019-07-03

有时我们需要在 nginx 中获取用户 cookie 中的某个值来实现一些功能。下面介绍获取 cookie 的两种方式。

直接获取

假如我们要获取的 cookie 的 key 是 pin,可以在 nginx 直接使用变量$cookie_pin 来获取。
获取方式是$cookie_{value_key}
但是这种方式有一个缺陷无法获取这样的 cookie 比如 pin.name 简单的说一下原因就是因为这样的变量在 nginx 中不规范
nginx 中的变量必须是字母或者_

正则匹配获取

用正则匹配获取没有上面的问题,我们可以获取任何 cookie 但是效率肯定没有上面的高。
比如这样

1
2
3
4
set $key "";
if ( $http_cookie ~* "pin.name=(.+?)(?=;|$)" ) {
set $key $1;
}

这样$key 变量中就获取到了 cookie pin.name 的值
可以看出 nginx 是支持非贪婪匹配的,我去在网上找资料的时候发现很多网页上写的都是错误的获取方法。

nginx 获取 cookie 中的值