]> granicus.if.org Git - php/commitdiff
Implement additional heuristic for session id search. Now looks into
authorSascha Schumann <sas@php.net>
Thu, 22 Jul 1999 17:55:13 +0000 (17:55 +0000)
committerSascha Schumann <sas@php.net>
Thu, 22 Jul 1999 17:55:13 +0000 (17:55 +0000)
REQUEST_URI as well.

ext/session/session.c

index 68130f63427ceaa731e0392a575ffc23120eee54..f6614da409a8783e85c8ba64e16911697da8b801 100644 (file)
@@ -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);