diff options
| author | Sascha Schumann <sas@php.net> | 1999-09-11 23:47:16 +0000 |
|---|---|---|
| committer | Sascha Schumann <sas@php.net> | 1999-09-11 23:47:16 +0000 |
| commit | f040ce584d1509d61e96fa503b611e14685e71db (patch) | |
| tree | 30408a76ba71e54c1ad66c90c495bb93b5321335 /ext/session/session.c | |
| parent | 9706aa1daa3008c1352cd53023355041136a0da5 (diff) | |
| download | php-git-f040ce584d1509d61e96fa503b611e14685e71db.tar.gz | |
add transparent session id propagation
this uses a custom scanner which detects relative URIs and changes
them appropiately.
must be explicitly enabled with --enable-trans-sid
(normal case is not affected, since session_adapt_uris defaults to
void statement. Compiler should eliminate dead code in output.c then.)
Diffstat (limited to 'ext/session/session.c')
| -rw-r--r-- | ext/session/session.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/ext/session/session.c b/ext/session/session.c index fc727bfa00..36957c1340 100644 --- a/ext/session/session.c +++ b/ext/session/session.c @@ -39,6 +39,7 @@ #include "ext/standard/php3_var.h" #include "ext/standard/datetime.h" #include "ext/standard/php_lcg.h" +#include "ext/standard/url_scanner.h" #ifdef ZTS int ps_globals_id; @@ -504,6 +505,7 @@ static void _php_session_start(PSLS_D) } else { REGISTER_STRING_CONSTANT("SID", empty_string, 0); } + PS(define_sid) = define_sid; PS(nr_open_sessions)++; @@ -528,7 +530,6 @@ static void _php_session_destroy(PSLS_D) PS(mod)->destroy(&PS(mod_data), PS(id)); php_rshutdown_session_globals(PSLS_C); php_rinit_session_globals(PSLS_C); - PS(nr_open_sessions)--; } /* {{{ proto string session_name([string newname]) @@ -756,6 +757,22 @@ PHP_FUNCTION(session_destroy) } /* }}} */ +#ifdef TRANS_SID +void session_adapt_uris(const char *src, uint srclen, char **new, uint *newlen) +{ + char *data; + size_t len; + char buf[512]; + PSLS_FETCH(); + + if(PS(define_sid) && PS(nr_open_sessions) > 0) { + snprintf(buf, sizeof(buf), "%s=%s", PS(session_name), PS(id)); + data = url_adapt(src, srclen, buf, &len); + *new = data; + *newlen = len; + } +} +#endif /* {{{ proto session_unset() Unset all registered variables */ @@ -784,6 +801,7 @@ static void php_rinit_session_globals(PSLS_D) _php_find_ps_serializer(INI_STR("session.serialize_handler") PSLS_CC); zend_hash_init(&PS(vars), 0, NULL, NULL, 0); + PS(define_sid) = 0; PS(save_path) = estrdup(INI_STR("session.save_path")); PS(session_name) = estrdup(INI_STR("session.name")); PS(entropy_file) = estrdup(INI_STR("session.entropy_file")); |
