@@ -327,17 +327,21 @@ static void _php_session_start(PSLS_D)
327
327
{
328
328
pval * * ppid ;
329
329
pval * * data ;
330
+ char * p ;
330
331
int send_cookie = 1 ;
331
332
int define_sid = 1 ;
332
333
int module_number = PS (module_number );
333
334
int nrand ;
335
+ int lensess ;
334
336
ELS_FETCH ();
335
337
336
338
if (PS (nr_open_sessions ) > 0 ) return ;
337
339
340
+ lensess = strlen (PS (session_name ));
341
+
338
342
if (!PS (id ) &&
339
343
zend_hash_find (& EG (symbol_table ), PS (session_name ),
340
- strlen ( PS ( session_name )) + 1 , (void * * ) & ppid ) == SUCCESS ) {
344
+ lensess + 1 , (void * * ) & ppid ) == SUCCESS ) {
341
345
convert_to_string ((* ppid ));
342
346
PS (id ) = estrndup ((* ppid )-> value .str .val , (* ppid )-> value .str .len );
343
347
send_cookie = 0 ;
@@ -348,9 +352,22 @@ static void _php_session_start(PSLS_D)
348
352
sizeof ("HTTP_COOKIE_VARS" ), (void * * ) & data ) == SUCCESS &&
349
353
(* data )-> type == IS_ARRAY &&
350
354
zend_hash_find ((* data )-> value .ht , PS (session_name ),
351
- strlen ( PS ( session_name )) + 1 , (void * * ) & ppid ) == SUCCESS ) {
355
+ lensess + 1 , (void * * ) & ppid ) == SUCCESS ) {
352
356
define_sid = 0 ;
353
357
}
358
+
359
+ if (!PS (id ) &&
360
+ zend_hash_find (& EG (symbol_table ), "REQUEST_URI" ,
361
+ sizeof ("REQUEST_URI" ), (void * * ) & data ) == SUCCESS &&
362
+ (* data )-> type == IS_STRING &&
363
+ (p = strstr ((* data )-> value .str .val , PS (session_name ))) &&
364
+ p [lensess ] == '=' ) {
365
+ char * q ;
366
+
367
+ p += lensess + 1 ;
368
+ if ((q = strpbrk (p , "/?\\" )))
369
+ PS (id ) = estrndup (p , q - p );
370
+ }
354
371
355
372
if (!PS (id )) {
356
373
PS (id ) = _php_create_id (NULL );
0 commit comments