Apache模块开发,存储请求变量的正确方法

Apache模块开发,存储请求变量的正确方法,c,apache,apache-modules,C,Apache,Apache Modules,目前,我将它们存储在global中。这是正确的方法吗?我希望变量与当前请求保持一致,并在请求完成后消失 例如: int data1; int data2; apr_status_t my_input_filter (ap_filter_t *f, apr_bucket_brigade *bb, ap_input_mode_t mode, apr_read_type_e block, apr_off_t readbytes) { if (somecond1) data1 = xy

目前,我将它们存储在global中。这是正确的方法吗?我希望变量与当前请求保持一致,并在请求完成后消失

例如:

int data1;
int data2;

apr_status_t my_input_filter (ap_filter_t *f, apr_bucket_brigade *bb,
    ap_input_mode_t mode, apr_read_type_e block, apr_off_t readbytes) {
    if (somecond1) data1 = xyz;
    if (somecond2 & data1 == xya) data2 = abc;

    if (somecond3 && data2 == abc) dosomething();
}

请注意,过滤时3秒钟可能不会一次发生,它们可能会在不同的时刻出现,但具有相同的请求。

如果您的模块使用事件或多线程包运行,则将其存储在全局变量中是一个坏主意


Apache在请求结构中提供了notes字典。使用它来存储您的私有数据。

对于输入过滤器,我的f->r始终为空。我想我不能使用noteTrick#2:创建您自己的哈希表,通过存储数据的连接索引。在连接->池中添加清理钩子,以便在连接终止时删除哈希项。