浏览 2529 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-11-30
最后修改:2010-11-30
在apache中的mod_proxy_balancer.c中: static char *get_cookie_param(request_rec *r, const char *name) { const char *cookies; const char *start_cookie; if ((cookies = apr_table_get(r->headers_in, "Cookie"))) { for (start_cookie = ap_strstr_c(cookies, name); start_cookie; start_cookie = ap_strstr_c(start_cookie + 1, name)) { if (start_cookie == cookies || start_cookie[-1] == ';' || start_cookie[-1] == ',' || isspace(start_cookie[-1])) { start_cookie += strlen(name); while(*start_cookie && isspace(*start_cookie)) ++start_cookie; if (*start_cookie == '=' && start_cookie[1]) { /* * Session cookie was found, get it's value */ char *end_cookie, *cookie; ++start_cookie; cookie = apr_pstrdup(r->pool, start_cookie); if ((end_cookie = strchr(cookie, ';')) != NULL) *end_cookie = '\0'; if((end_cookie = strchr(cookie, ',')) != NULL) *end_cookie = '\0'; return cookie; } } } } return NULL; } apache没由提供cookie path的设置,因此按照cookie的优先顺序,将首先取到与应用上下文中接近的jsessionid,所以显然,如果各个应用都有同名的sticksession,其值又不同,那么apache粘性会话不能跨web应用。 解决方法也显然有二: 一.修改mod_proxy代码,提供在指定的cookie path读取sticksession的配置 (发现在服务端读不了cookie path,所以此路不同,哈哈) 二.不使用jsessionid作为stickysession的名字,自己定义一个,并在/添加cookie,如myjsessionid=${your uuid}.server1,其中server1为route id。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |