long gc_maxlifetime;
int module_number;
long cache_expire;
- zend_bool bug_compat; /* Whether to behave like PHP 4.2 and earlier */
- zend_bool bug_compat_warn; /* Whether to warn about it */
const struct ps_serializer_struct *serializer;
zval *http_session_vars;
zend_bool auto_start;
/* {{{ PHP_INI
*/
PHP_INI_BEGIN()
- STD_PHP_INI_BOOLEAN("session.bug_compat_42", "1", PHP_INI_ALL, OnUpdateBool, bug_compat, php_ps_globals, ps_globals)
- STD_PHP_INI_BOOLEAN("session.bug_compat_warn", "1", PHP_INI_ALL, OnUpdateBool, bug_compat_warn, php_ps_globals, ps_globals)
STD_PHP_INI_ENTRY("session.save_path", "", PHP_INI_ALL, OnUpdateSaveDir,save_path, php_ps_globals, ps_globals)
STD_PHP_INI_ENTRY("session.name", "PHPSESSID", PHP_INI_ALL, OnUpdateString, session_name, php_ps_globals, ps_globals)
PHP_INI_ENTRY("session.save_handler", "files", PHP_INI_ALL, OnUpdateSaveHandler)
int ret = FAILURE;
IF_SESSION_VARS() {
- if (PS(bug_compat)) {
- HashTable *ht = Z_ARRVAL_P(PS(http_session_vars));
- HashPosition pos;
- zval **val;
- int do_warn = 0;
-
- zend_hash_internal_pointer_reset_ex(ht, &pos);
-
- while (zend_hash_get_current_data_ex(ht,
- (void **) &val, &pos) != FAILURE) {
- if (Z_TYPE_PP(val) == IS_NULL) {
- if (migrate_global(ht, &pos TSRMLS_CC))
- do_warn = 1;
- }
- zend_hash_move_forward_ex(ht, &pos);
- }
-
- if (do_warn && PS(bug_compat_warn)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively.");
- }
- }
if (PS(mod_data)) {
char *val;
+++ /dev/null
---TEST--
-bug compatibility: unset($c) with enabled register_globals
---SKIPIF--
-<?php die('skip');/* RG removed */ ?>
---INI--
-session.use_cookies=0
-session.cache_limiter=
-session.bug_compat_42=1
-session.serialize_handler=php
-session.save_handler=files
---FILE--
-<?php
-error_reporting(E_ALL);
-
-session_id("abtest");
-
-### Phase 1 cleanup
-session_start();
-session_destroy();
-
-### Phase 2 $_SESSION["c"] does not contain any value
-session_id("abtest");
-$_SESSION['c'] = $c;
-
-unset($c);
-$c = 3.14;
-session_write_close();
-unset($_SESSION);
-unset($c);
-
-### Phase 3 $_SESSION["c"] is set
-session_start();
-$c = $_SESSION['c'];
-var_dump($c);
-var_dump($_SESSION);
-unset($c);
-$c = 2.78;
-
-session_write_close();
-unset($_SESSION);
-unset($c);
-
-### Phase 4 final
-
-session_start();
-$c = $_SESSION['c'];
-var_dump($c);
-var_dump($_SESSION);
-
-session_destroy();
-?>
---EXPECT--
-float(3.14)
-array(1) {
- ["c"]=>
- &float(3.14)
-}
-float(3.14)
-array(1) {
- ["c"]=>
- &float(3.14)
-}
+++ /dev/null
---TEST--
-bug compatibility: global is used albeit register_globals=0
---SKIPIF--
-<?php include('skipif.inc');
-die("skip, no more RG and session_register");
- if (version_compare(PHP_VERSION,"4.2.3-dev", "<")) die("skip this is for PHP >= 4.2.3");
-?>
---INI--
-session.use_cookies=0
-session.cache_limiter=
-session.bug_compat_42=1
-session.bug_compat_warn=1
-track_errors=1
-log_errors=0
-html_errors=0
-display_errors=1
-error_reporting=2039;
-session.serialize_handler=php
-session.save_handler=files
---FILE--
-<?php
-session_id("abtest");
-### Phase 1 cleanup
-session_start();
-session_destroy();
-
-### Phase 2 $_SESSION["c"] does not contain any value
-session_id("abtest");
-$_SESSION['c'] = NULL;
-$c = $_SESSION['c'];
-var_dump($c);
-unset($c);
-$c = 3.14;
-@session_write_close(); // this generates an E_WARNING which will be printed
-// by $php_errormsg so we can use "@" here. ANY further message IS an error.
-echo $php_errormsg."\n";
-unset($_SESSION);
-unset($c);
-
-### Phase 3 $_SESSION["c"] is set
-session_start();
-$c = $_SESSION['c'];
-var_dump($_SESSION);
-unset($c);
-$c = 2.78;
-
-session_write_close();
-unset($_SESSION);
-unset($c);
-
-### Phase 4 final
-
-session_start();
-$c = $_SESSION['c'];
-var_dump($c);
-var_dump($_SESSION);
-
-session_destroy();
-?>
---EXPECTF--
-NULL
-Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively.
-array(1) {
- ["c"]=>
- float(3.14)
-}
-NULL
-array(1) {
- ["c"]=>
- float(3.14)
-}
+++ /dev/null
---TEST--
-bug compatibility: global is used albeit register_globals=0
---SKIPIF--
-<?php include('skipif.inc');
- if (version_compare(PHP_VERSION,"4.2.3-dev", ">=")) die("skip this is for PHP < 4.2.3");
-?>
---INI--
-session.use_cookies=0
-session.cache_limiter=
-session.bug_compat_42=1
-session.bug_compat_warn=0
---FILE--
-<?php
-error_reporting(E_ALL & ~E_NOTICE);
-
-session_id("abtest");
-
-### Phase 1 cleanup
-session_start();
-session_destroy();
-
-### Phase 2 $_SESSION["c"] does not contain any value
-session_id("abtest");
-session_register("c");
-var_dump($c);
-unset($c);
-$c = 3.14;
-session_write_close();
-unset($_SESSION);
-unset($c);
-
-### Phase 3 $_SESSION["c"] is set
-session_start();
-var_dump($_SESSION);
-unset($c);
-$c = 2.78;
-
-session_write_close();
-unset($_SESSION);
-unset($c);
-
-### Phase 4 final
-
-session_start();
-var_dump($c);
-var_dump($_SESSION);
-
-session_destroy();
-?>
---EXPECT--
-NULL
-array(1) {
- ["c"]=>
- float(3.14)
-}
-NULL
-array(1) {
- ["c"]=>
- float(3.14)
-}
--TEST--
-unset($_SESSION["name"]); should work with register_globals=off
+unset($_SESSION["name"]); should work
--SKIPIF--
<?php include('skipif.inc'); ?>
--INI--
session.use_cookies=0
session.cache_limiter=
-session.bug_compat_42=1
-session.bug_compat_warn=0
session.serialize_handler=php
session.save_handler=files
--FILE--
--INI--
session.use_cookies=0
session.cache_limiter=
-session.bug_compat_42=1
-session.bug_compat_warn=0
--FILE--
<?php
error_reporting(E_ALL);
--INI--
session.use_cookies=0
session.cache_limiter=
-session.bug_compat_42=1
-session.bug_compat_warn=0
--FILE--
<?php
error_reporting(E_ALL);
+++ /dev/null
---TEST--
-registering $_SESSION should not segfault
---SKIPIF--
-<?php die("skip no more RG or session_register"); ?>
---INI--
-session.use_cookies=0
-session.cache_limiter=
-session.bug_compat_42=1
-session.bug_compat_warn=0
-session.serialize_handler=php
-session.save_handler=files
---FILE--
-<?php
-error_reporting(E_ALL);
-
-### Absurd example, value of $_SESSION does not matter
-
-session_id("abtest");
-session_start();
-session_register("_SESSION");
-$_SESSION = "kk";
-
-session_write_close();
-
-### Restart to test for $_SESSION brokenness
-
-session_start();
-$_SESSION = "kk";
-session_destroy();
-
-print "I live\n";
-?>
---EXPECT--
-I live
--INI--
session.use_cookies=0
session.cache_limiter=
-session.bug_compat_42=1
-session.bug_compat_warn=0
session.serialize_handler=php
session.save_handler=files
--FILE--
session.use_trans_sid=1
session.use_cookies=0
session.cache_limiter=
-session.bug_compat_42=1
-session.bug_compat_warn=0
session.name=PHPSESSID
session.serialize_handler=php
session.save_handler=files
+++ /dev/null
---TEST--
-serializing references test case using globals
---SKIPIF--
-<?php die("skip no more RG or session_register");include('skipif.inc'); ?>
---INI--
-session.use_cookies=0
-session.cache_limiter=
-session.serialize_handler=php
-session.save_handler=files
---FILE--
-<?php
-
-error_reporting(E_ALL);
-
-class TFoo {
- public $c;
- function TFoo($c) {
- $this->c = $c;
- }
- function inc() {
- $this->c++;
- }
-}
-
-session_id("abtest");
-session_start();
-$_SESSION['o1'] = $o1;
-$_SESSION['o2'] = $o2;
-
-$o1 = new TFoo(42);
-$o2 =& $o1;
-
-session_write_close();
-
-unset($o1);
-unset($o2);
-
-session_start();
-
-var_dump($_SESSION);
-
-$o1->inc();
-$o2->inc();
-
-var_dump($_SESSION);
-
-session_destroy();
-?>
---EXPECTF--
-array(2) {
- ["o1"]=>
- &object(TFoo)#%d (1) {
- ["c"]=>
- int(42)
- }
- ["o2"]=>
- &object(TFoo)#%d (1) {
- ["c"]=>
- int(42)
- }
-}
-array(2) {
- ["o1"]=>
- &object(TFoo)#%d (1) {
- ["c"]=>
- int(44)
- }
- ["o2"]=>
- &object(TFoo)#%d (1) {
- ["c"]=>
- int(44)
- }
-}
<?php
// This script prints "skip" if condition does not meet.
-if (!extension_loaded("session") && ini_get("enable_dl")) {
+if (!extension_loaded("session")) {
$dlext = (substr(PHP_OS, 0, 3) == "WIN") ? ".dll" : ".so";
@dl("session$dlext");
}