diff options
author | Sascha Schumann <sas@php.net> | 1999-07-22 17:55:13 +0000 |
---|---|---|
committer | Sascha Schumann <sas@php.net> | 1999-07-22 17:55:13 +0000 |
commit | c640f3d8c8ed495732aa30203901a45835c347cc (patch) | |
tree | e96dfcddd1431e12f298692e992b655a8e06c8f5 | |
parent | 7ae27b5bcd4e80a5e000fe517b5ad3224c16e5b5 (diff) | |
download | php-git-c640f3d8c8ed495732aa30203901a45835c347cc.tar.gz |
Implement additional heuristic for session id search. Now looks into
REQUEST_URI as well.
-rw-r--r-- | ext/session/session.c | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/ext/session/session.c b/ext/session/session.c index 68130f6342..f6614da409 100644 --- a/ext/session/session.c +++ b/ext/session/session.c @@ -327,17 +327,21 @@ static void _php_session_start(PSLS_D) { pval **ppid; pval **data; + char *p; int send_cookie = 1; int define_sid = 1; int module_number = PS(module_number); int nrand; + int lensess; ELS_FETCH(); if (PS(nr_open_sessions) > 0) return; + lensess = strlen(PS(session_name)); + if(!PS(id) && zend_hash_find(&EG(symbol_table), PS(session_name), - strlen(PS(session_name)) + 1, (void **) &ppid) == SUCCESS) { + lensess + 1, (void **) &ppid) == SUCCESS) { convert_to_string((*ppid)); PS(id) = estrndup((*ppid)->value.str.val, (*ppid)->value.str.len); send_cookie = 0; @@ -348,9 +352,22 @@ static void _php_session_start(PSLS_D) sizeof("HTTP_COOKIE_VARS"), (void **) &data) == SUCCESS && (*data)->type == IS_ARRAY && zend_hash_find((*data)->value.ht, PS(session_name), - strlen(PS(session_name)) + 1, (void **) &ppid) == SUCCESS) { + lensess + 1, (void **) &ppid) == SUCCESS) { define_sid = 0; } + + if(!PS(id) && + zend_hash_find(&EG(symbol_table), "REQUEST_URI", + sizeof("REQUEST_URI"), (void **) &data) == SUCCESS && + (*data)->type == IS_STRING && + (p = strstr((*data)->value.str.val, PS(session_name))) && + p[lensess] == '=') { + char *q; + + p += lensess + 1; + if((q = strpbrk(p, "/?\\"))) + PS(id) = estrndup(p, q - p); + } if(!PS(id)) { PS(id) = _php_create_id(NULL); |