From: Yasuo Ohgaki Date: Sat, 10 Aug 2013 07:57:56 +0000 (+0900) Subject: Implemented Request #20421 (session_abort() and session_reset() function X-Git-Tag: php-5.6.0alpha1~317 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6941ce35839f255234c727634a2309b893e4f049;p=php Implemented Request #20421 (session_abort() and session_reset() function --- diff --git a/NEWS b/NEWS index ab9edc8c8e..0c94ea23e1 100644 --- a/NEWS +++ b/NEWS @@ -12,6 +12,8 @@ PHP NEWS (Yasuo) . Implemented Request #54649 (Create session_serializer_name()). (Yasuo) . Implemented Request #17860 (Session write short circuit). (Yasuo) + . Implemented Request #20421 (session_abort() and session_reset() function). + (Yasuo) . Implemented Request #11100 (session_gc() function). (Yasuo) - mysqlnd: diff --git a/ext/session/session.c b/ext/session/session.c index 7a4e601e10..402cb8b56a 100644 --- a/ext/session/session.c +++ b/ext/session/session.c @@ -1550,6 +1550,26 @@ static void php_session_flush(TSRMLS_D) /* {{{ */ } /* }}} */ +static void php_session_abort(TSRMLS_D) /* {{{ */ +{ + if (PS(session_status) == php_session_active) { + PS(session_status) = php_session_none; + if (PS(mod_data) || PS(mod_user_implemented)) { + PS(mod)->s_close(&PS(mod_data) TSRMLS_CC); + } + } +} +/* }}} */ + +static void php_session_reset(TSRMLS_D) /* {{{ */ +{ + if (PS(session_status) == php_session_active) { + php_session_initialize(TSRMLS_C); + } +} +/* }}} */ + + PHPAPI void session_adapt_url(const char *url, size_t urllen, char **new, size_t *newlen TSRMLS_DC) /* {{{ */ { if (PS(apply_trans_sid) && (PS(session_status) == php_session_active)) { @@ -2056,6 +2076,22 @@ static PHP_FUNCTION(session_write_close) } /* }}} */ +/* {{{ proto void session_abort(void) + Abort session and end session. Session data will not be written */ +static PHP_FUNCTION(session_abort) +{ + php_session_abort(TSRMLS_C); +} +/* }}} */ + +/* {{{ proto void session_reset(void) + Reset session data from saved session data */ +static PHP_FUNCTION(session_reset) +{ + php_session_reset(TSRMLS_C); +} +/* }}} */ + /* {{{ proto int session_status(void) Returns the current session status */ static PHP_FUNCTION(session_status) @@ -2249,6 +2285,8 @@ static const zend_function_entry session_functions[] = { PHP_FE(session_set_cookie_params, arginfo_session_set_cookie_params) PHP_FE(session_get_cookie_params, arginfo_session_void) PHP_FE(session_write_close, arginfo_session_void) + PHP_FE(session_abort, arginfo_session_void) + PHP_FE(session_reset, arginfo_session_void) PHP_FE(session_status, arginfo_session_void) PHP_FE(session_gc, arginfo_session_gc) PHP_FE(session_register_shutdown, arginfo_session_void) diff --git a/ext/session/tests/session_abort_basic.phpt b/ext/session/tests/session_abort_basic.phpt new file mode 100644 index 0000000000..4a6702f0dc --- /dev/null +++ b/ext/session/tests/session_abort_basic.phpt @@ -0,0 +1,51 @@ +--TEST-- +Test session_abort() function : basic functionality +--SKIPIF-- + +--INI-- +session.save_path= +session.name=PHPSESSID +--FILE-- + +--EXPECTF-- +*** Testing session_abort() : basic functionality *** +array(2) { + ["foo"]=> + int(123) + ["bar"]=> + int(456) +} +array(1) { + ["foo"]=> + int(123) +} +Done diff --git a/ext/session/tests/session_gc_basic.phpt b/ext/session/tests/session_gc_basic.phpt index 498f98031e..f0726ce93b 100644 --- a/ext/session/tests/session_gc_basic.phpt +++ b/ext/session/tests/session_gc_basic.phpt @@ -13,7 +13,7 @@ error_reporting(E_ALL); ob_start(); /* - * Prototype : int session_get_cookie_params([int maxlifetime]) + * Prototype : int session_gc([int maxlifetime]) * Description : Execute gc and return number of deleted data * Source code : ext/session/session.c */ diff --git a/ext/session/tests/session_reset_basic.phpt b/ext/session/tests/session_reset_basic.phpt new file mode 100644 index 0000000000..75c6a04119 --- /dev/null +++ b/ext/session/tests/session_reset_basic.phpt @@ -0,0 +1,49 @@ +--TEST-- +Test session_reset() function : basic functionality +--SKIPIF-- + +--INI-- +session.save_path= +session.name=PHPSESSID +--FILE-- + +--EXPECTF-- +*** Testing session_abort() : basic functionality *** +array(2) { + ["foo"]=> + int(123) + ["bar"]=> + int(456) +} +array(1) { + ["foo"]=> + int(123) +} +Done