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に設定されていた。