mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-01-30 10:06:43 +00:00
[MEDIUM] cookie: support client cookies with some contents appended to their value
In all cookie persistence modes but prefix, we now support cookies whose value is suffixed with some contents after a vertical bar ('|'). This will be used to pass an optional expiration date. So as of now we only consider the part of the cookie value which is used before the vertical bar. (cherry picked from commit a4486bf4e5b03b5a980d03fef799f6407b2c992d)
This commit is contained in:
parent
3193685865
commit
bca9969daf
@ -110,6 +110,12 @@
|
||||
#define COOKIE_DELIM '~'
|
||||
#endif
|
||||
|
||||
// this delimitor is used between a server's name and a last visit date in
|
||||
// cookies exchanged with the client.
|
||||
#ifndef COOKIE_DELIM_DATE
|
||||
#define COOKIE_DELIM_DATE '|'
|
||||
#endif
|
||||
|
||||
#define CONN_RETRIES 3
|
||||
|
||||
#define CHK_CONNTIME 2000
|
||||
|
@ -5922,10 +5922,14 @@ void manage_client_side_cookies(struct session *t, struct buffer *req)
|
||||
}
|
||||
}
|
||||
|
||||
/* For cookies in prefix mode. The form is :
|
||||
/* Persistence cookies in passive, rewrite or insert mode have the
|
||||
* following form :
|
||||
*
|
||||
* Cookie: NAME=SRV[|<lastseen>[|<firstseen>]]
|
||||
*
|
||||
* For cookies in prefix mode, the form is :
|
||||
*
|
||||
* Cookie: NAME=SRV~VALUE
|
||||
*
|
||||
*/
|
||||
if ((att_end - att_beg == t->be->cookie_len) && (t->be->cookie_name != NULL) &&
|
||||
(memcmp(att_beg, t->be->cookie_name, att_end - att_beg) == 0)) {
|
||||
@ -5952,10 +5956,21 @@ void manage_client_side_cookies(struct session *t, struct buffer *req)
|
||||
for (delim = val_beg; delim < val_end; delim++)
|
||||
if (*delim == COOKIE_DELIM)
|
||||
break;
|
||||
}
|
||||
else
|
||||
} else {
|
||||
char *vbar1;
|
||||
delim = val_end;
|
||||
|
||||
/* Now check if the cookie contains a date field, which would
|
||||
* appear after a vertical bar ('|') just after the server name
|
||||
* and before the delimiter.
|
||||
*/
|
||||
vbar1 = memchr(val_beg, COOKIE_DELIM_DATE, val_end - val_beg);
|
||||
if (vbar1) {
|
||||
/* OK, so left of the bar is the server's cookie and
|
||||
* right is the last seen date.
|
||||
*/
|
||||
delim = vbar1++;
|
||||
}
|
||||
}
|
||||
|
||||
/* Here, we'll look for the first running server which supports the cookie.
|
||||
* This allows to share a same cookie between several servers, for example
|
||||
|
Loading…
Reference in New Issue
Block a user