}
/* }}} */
+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)) {
}
/* }}} */
+/* {{{ 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)
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)
--- /dev/null
+--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
--- /dev/null
+--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