nginx moduleでのcookieの扱いについて解説

Posted by roadman on Thursday, July 19, 2012

TOC

解説

  • 基本的にmoduleのhandlerに渡されるngx_http_request_t構造体のバッファに入っている。

    req->headers_in.cookies
    
  • ただ、cookiesがngx_array_tというリスト形式のバッファで実際どのような形でデータが入っているのかよくわからない。

  • cookiesを設定している処理(ngx_http_request.c内)を見てみると、

    if (ngx_array_init(&r->headers_in.cookies, r->pool, 2, sizeof(ngx_table_elt_t *)) != NGX_OK)
    {
    ngx_http_close_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
    return;
    }
    
  • となってる。バッファの形式はngx_table_elt_t構造体だろう。

    typedef struct {
     ngx_uint_t hash;
     ngx_str_t key;
     ngx_str_t value;
     u_char *lowcase_key;
    } ngx_table_elt_t;
    
  • key-valueハッシュかな?

  • ngx_http_parse_multi_header_lines()という関数を使えば簡単に取り出せた。

    ngx_str_t cookie, s;
    s.len = 3;
    s.data = "ip";
    if(ngx_http_parse_multi_header_lines(&(req->headers_in.cookies), &s, &cookie) == NGX_DECLINED)
    {
      return(0);
    }
    
  • これでipというcookieの値がcookieに設定されていた。