在nginx模块中读写用户cookie |
发布: 2009-03-15 18:02 |
nginx已经提供了存储用户cookie的机制,还提供了比较方便的读写cookie的相关函数,不过文档并不好找。 这是一点阅读nginx源代码的总结。 这里不再说明如何编写一个完整的nginx模块,只从模块的处理函数入手。 以hello模块为例,模块的处理函数名为: static ngx_int_t ngx_http_hello_handler(ngx_http_request_t *r); 主要涉及的数据结构就是 处理函数的参数,ngx_http_request_t *r; 在这个结构中包含两个成员:r->headers_in, r->headers_out 其中前者中存储的请求头信息,后者存储的是响应头信息,这两个结构并不相同。 1. 在r->headers_in结构有一ngx_array_t 类型成员 r->headers_in.cookies,这就是nginx存储请求cookie的变量,通过下面的方法取到cookie串的值:
值得注意的是,这里输出的cookie count一定是<=1,因为nginx把所有的cookie键值对都格式化与一个字符串,如 k1=v1;k2=v2 ... 这部分代码在任何有ngx_http_request_t *实例的地方都可以调用。 2. 在r->headers_out中并没有cookies成员,需要另外一个成员r->headers_out.headers, 通过调用nginx提供的几个函数,将新的cookie写到响应头结构中。
这段代码就能将一个cookie写入到响应头结构中,如果要写入多个,可按照这种方法适当改写即可。 3. 涉及的nginx相关数据结构:
这部分代码在nginx-0.6.xx版本上通过测试. |
原文: http://qtchina.tk/?q=node/286 |
Powered by zexport
|