用nginx实现不同Cookie的适配

用nginx实现不同Cookie的适配

1. 背景

用Java语言开发的Web应用,其Session所使用的Cookie名称一般是JSESSIONID
用PHP语言开发的Web应用,其Session所使用的Cookie名称一般是PHPSESSID,当然,这个可以改。

因特殊原因,需要由JavaCookiePHPCookie,以便不用更改APP端的代码,也不更改服务端的代码。

2. 关键知识点(针对 nginx):

  1. $cookie_name 是 请求中名称为name的Cookie的值
    如:

    Cookie: PHPSESSID=123456

    nginx配置文件中 $cookie_PHPSESSID的值为 1234546

  2. $http_cookie 是请求头Cookie的全部内容
    如:

    Cookie: PHPSESSID=123456

    nginx配置文件中 $http_cookie的值为 PHPSESSID=123456

  3. more_headers模块的more_set_input_headers指令可以设置请求头

  4. 字符串中可以嵌入nginx变量
    如:

    if ($arg_cid) {
      more_set_input_headers "Cookie: PHPSESSID=$arg_cid";
    }

3. 实现

可以在nginx配置文件中使用如下代码:

if ($cookie_JSESSIONID) {
   more_set_input_headers "Cookie: PHPSESSID=$cookie_JSESSIONID; $http_cookie";
}

反过来,也可以由PHP的Cookie转JavaCookie

if ($cookie_PHPSESSID) {
  more_set_input_headers "Cookie: JSESSIONID=$cookie_PHPSESSID; $http_cookie";
}

用Postman测试:
用nginx实现不同Cookie的适配_第1张图片

请求头只传了JSESSIONID=123456,服务器端返回的Cookie,增加了PHPSESSID的内容,与JSESSIONID的值一样。

你可能感兴趣的:(Nginx)