com php-src: Implemented Request #20421 (session_abort( ) and session_reset() function: NEWS ext/se ssion/session.c
ext/session/tests/session_abort_basic .phpt ext/session/tests/session_gc_basic.phpt ext/s ession/tests/session_reset_basic.phpt
| From: | Yasuo Ohgaki | Date: | Sat, 10 Aug 2013 07:57:56 +0000 |
| Subject: | com php-src: Implemented Request #20421 (session_abort( ) and session_reset() function: NEWS ext/se ssion/session.c ext/session/tests/session_abort_basic .phpt ext/session/tests/session_gc_basic.phpt ext/s ession/tests/session_reset_basic.phpt |
||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-72887@lists.php.net to get a copy of this message | ||
Commit: 6941ce35839f255234c727634a2309b893e4f049
Author: Yasuo Ohgaki <yohgaki@php.net> Sat, 10 Aug 2013 16:57:56 +0900
Parents: 54a42f0d0cf85fe0c032009b1f601427ae1c8566
Branches: master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=6941ce35839f255234c727634a2309b893e4f049
Log:
Implemented Request #20421 (session_abort() and session_reset() function
Bugs:
https://bugs.php.net/20421
Changed paths:
M NEWS
M ext/session/session.c
A ext/session/tests/session_abort_basic.phpt
M ext/session/tests/session_gc_basic..phpt
A ext/session/tests/session_reset_basic.phpt
Diff:
diff --git a/NEWS b/NEWS
index ab9edc8..0c94ea2 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 7a4e601..402cb8b 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 0000000..4a6702f
--- /dev/null
+++ b/ext/session/tests/session_abort_basic.phpt
@@ -0,0 +1,51 @@
+--TEST--
+Test session_abort() function : basic functionality
+--SKIPIF--
+<?php include('skipif.inc'); ?>
+--INI--
+session..save_path=
+session.name=PHPSESSID
+--FILE--
+<?php
+
+ob_start();
+
+/*
+ * Prototype : void session_abort(void)
+ * Description : Should abort session. Session data should not be written.
+ * Source code : ext/session/session.c
+ */
+
+echo "*** Testing session_abort() : basic functionality ***\n";
+
+session_start();
+$session_id = session_id();
+$_SESSION['foo'] = 123;
+session_commit();
+
+session_id($session_id);
+session_start();
+$_SESSION['bar'] = 456;
+var_dump($_SESSION);
+session_abort();
+
+session_id($session_id);
+session_start();
+var_dump($_SESSION); // Should only have 'foo'
+
+echo "Done".PHP_EOL;
+
+?>
+--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 498f980..f0726ce 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 0000000..75c6a04
--- /dev/null
+++ b/ext/session/tests/session_reset_basic.phpt
@@ -0,0 +1,49 @@
+--TEST--
+Test session_reset() function : basic functionality
+--SKIPIF--
+<?php include('skipif.inc'); ?>
+--INI--
+session.save_path=
+session.name=PHPSESSID
+--FILE--
+<?php
+
+ob_start();
+
+/*
+ * Prototype : void session_reset(void)
+ * Description : Should abort session. Session data should not be written.
+ * Source code : ext/session/session.c
+ */
+
+echo "*** Testing session_abort() : basic functionality ***\n";
+
+session_start();
+$session_id = session_id();
+$_SESSION['foo'] = 123;
+session_commit();
+
+session_id($session_id);
+session_start();
+$_SESSION['bar'] = 456;
+var_dump($_SESSION);
+session_reset();
+
+var_dump($_SESSION); // Should only have 'foo'
+
+echo "Done".PHP_EOL;
+
+?>
+--EXPECTF--
+*** Testing session_abort() : basic functionality ***
+array(2) {
+ ["foo"]=>
+ int(123)
+ ["bar"]=>
+ int(456)
+}
+array(1) {
+ ["foo"]=>
+ int(123)
+}
+Done