jani Wed Aug 6 05:34:55 2008 UTC
Modified files:
/php-src/ext/session session.c
/php-src/ext/session/tests session_decode_variation3.phpt
session_encode_variation3.phpt
session_encode_variation4.phpt
session_encode_variation5.phpt
session_encode_variation7.phpt
session_encode_variation8.phpt
Log:
- Fixed some inconsistencies with the behaviour of sessions. Changed
session_start() to return false when session start fails.
http://cvs.php.net/viewvc.cgi/php-src/ext/session/session.c?r1=1.491&r2=1.492&diff_format=u
Index: php-src/ext/session/session.c
diff -u php-src/ext/session/session.c:1.491 php-src/ext/session/session.c:1.492
--- php-src/ext/session/session.c:1.491 Wed Aug 6 04:48:39 2008
+++ php-src/ext/session/session.c Wed Aug 6 05:34:55 2008
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: session.c,v 1.491 2008/08/06 04:48:39 jani Exp $ */
+/* $Id: session.c,v 1.492 2008/08/06 05:34:55 jani Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -508,7 +508,10 @@
err_type = E_ERROR;
}
- php_error_docref(NULL TSRMLS_CC, err_type, "Cannot find save
handler %s", new_value);
+ /* Do not output error when restoring ini options. */
+ if (stage != ZEND_INI_STAGE_DEACTIVATE) {
+ php_error_docref(NULL TSRMLS_CC, err_type, "Cannot find
save handler '%s'", new_value);
+ }
return FAILURE;
}
PS(mod) = tmp;
@@ -517,20 +520,6 @@
}
/* }}} */
-static PHP_INI_MH(OnUpdateTransSid) /* {{{ */
-{
- SESSION_CHECK_ACTIVE_STATE;
-
- if (!strncasecmp(new_value, "on", sizeof("on"))) {
- PS(use_trans_sid) = (zend_bool) 1;
- } else {
- PS(use_trans_sid) = (zend_bool) atoi(new_value);
- }
-
- return SUCCESS;
-}
-/* }}} */
-
static PHP_INI_MH(OnUpdateSerializer) /* {{{ */
{
const ps_serializer *tmp;
@@ -547,7 +536,10 @@
err_type = E_ERROR;
}
- php_error_docref(NULL TSRMLS_CC, err_type, "Cannot find
serialization handler '%s'", new_value);
+ /* Do not output error when restoring ini options. */
+ if (stage != ZEND_INI_STAGE_DEACTIVATE) {
+ php_error_docref(NULL TSRMLS_CC, err_type, "Cannot find
serialization handler '%s'", new_value);
+ }
return FAILURE;
}
PS(serializer) = tmp;
@@ -556,6 +548,20 @@
}
/* }}} */
+static PHP_INI_MH(OnUpdateTransSid) /* {{{ */
+{
+ SESSION_CHECK_ACTIVE_STATE;
+
+ if (!strncasecmp(new_value, "on", sizeof("on"))) {
+ PS(use_trans_sid) = (zend_bool) 1;
+ } else {
+ PS(use_trans_sid) = (zend_bool) atoi(new_value);
+ }
+
+ return SUCCESS;
+}
+/* }}} */
+
static PHP_INI_MH(OnUpdateSaveDir) /* {{{ */
{
/* Only do the safemode/open_basedir check at runtime */
@@ -1236,30 +1242,42 @@
{
zval **ppid;
zval **data;
- char *p;
+ char *p, *value;
int nrand;
int lensess;
PS(apply_trans_sid) = PS(use_trans_sid);
- if (PS(session_status) != php_session_none) {
- if (PS(session_status) == php_session_disabled) {
- char *value;
+ switch (PS(session_status)) {
+ case php_session_active:
+ php_error(E_NOTICE, "A session had already been started
- ignoring session_start()");
+ return;
+ break;
+ case php_session_disabled:
value = zend_ini_string("session.save_handler",
sizeof("session.save_handler"), 0);
-
- if (value) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,
"Cannot find save handler %s", value);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,
"Cannot find unknown save handler");
+ if (!PS(mod) && value) {
+ PS(mod) = _php_find_ps_module(value TSRMLS_CC);
+ if (!PS(mod)) {
+ php_error_docref(NULL TSRMLS_CC,
E_WARNING, "Cannot find save handler '%s' - session startup failed", value);
+ return;
+ }
}
- return;
- }
- php_error(E_NOTICE, "A session had already been started -
ignoring session_start()");
- return;
- } else {
- PS(define_sid) = 1;
- PS(send_cookie) = 1;
+ value = zend_ini_string("session.serialize_handler",
sizeof("session.serialize_handler"), 0);
+ if (!PS(serializer) && value) {
+ PS(serializer) = _php_find_ps_serializer(value
TSRMLS_CC);
+ if (!PS(serializer)) {
+ php_error_docref(NULL TSRMLS_CC,
E_WARNING, "Cannot find serialization handler '%s' - session startup failed",
value);
+ return;
+ }
+ }
+ PS(session_status) = php_session_none;
+ /* fallthrough */
+
+ default:
+ case php_session_none:
+ PS(define_sid) = 1;
+ PS(send_cookie) = 1;
}
lensess = strlen(PS(session_name));
@@ -1560,7 +1578,6 @@
if (name) {
if (memchr(name, '\0', name_len) != NULL) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "The
save_path cannot contain NULL characters");
-
zval_dtor(return_value);
RETURN_FALSE;
}
@@ -1762,6 +1779,10 @@
{
/* skipping check for non-zero args for performance reasons here ?*/
php_session_start(TSRMLS_C);
+
+ if (PS(session_status) != php_session_active) {
+ RETURN_FALSE;
+ }
RETURN_TRUE;
}
/* }}} */
@@ -1778,7 +1799,6 @@
}
/* }}} */
-
/* {{{ proto void session_unset(void) U
Unset all registered variables */
static PHP_FUNCTION(session_unset)
@@ -1968,7 +1988,7 @@
}
ps_globals->http_session_vars = NULL;
}
-/* }}}*/
+/* }}} */
static PHP_MINIT_FUNCTION(session) /* {{{ */
{
@@ -2048,7 +2068,7 @@
DISPLAY_INI_ENTRIES();
}
-/* }}} */
+/* }}} */
zend_module_entry session_module_entry = {
STANDARD_MODULE_HEADER,
http://cvs.php.net/viewvc.cgi/php-src/ext/session/tests/session_decode_variation3.phpt?r1=1.3&r2=1.4&diff_format=u
Index: php-src/ext/session/tests/session_decode_variation3.phpt
diff -u php-src/ext/session/tests/session_decode_variation3.phpt:1.3
php-src/ext/session/tests/session_decode_variation3.phpt:1.4
--- php-src/ext/session/tests/session_decode_variation3.phpt:1.3 Tue May
27 12:17:39 2008
+++ php-src/ext/session/tests/session_decode_variation3.phpt Wed Aug 6
05:34:55 2008
@@ -23,8 +23,8 @@
$_SESSION["bar"] = "Blah!";
$_SESSION["guff"] = 123.456;
var_dump($_SESSION);
-$encoded = "A2Zvb2k6MTIzNDU2Nzg5MDs=";
-var_dump(session_decode(base64_decode($encoded)));
+$encoded = "foo|i:1234567890;";
+var_dump(session_decode($encoded));
var_dump($_SESSION);
var_dump(session_destroy());
@@ -34,10 +34,11 @@
--EXPECTF--
*** Testing session_decode() : variation ***
-Warning: session_start(): Unknown session.serialize_handler. Failed to decode
session object in %s on line %d
-bool(true)
-array(0) {
-}
+Warning: session_start(): Cannot find serialization handler 'blah' - session
startup failed in %s on line %d
+bool(false)
+
+Notice: Undefined variable: _SESSION in %s on line %d
+NULL
array(3) {
[u"foo"]=>
int(1234567890)
@@ -49,14 +50,8 @@
Warning: session_decode(): Unknown session.serialize_handler. Failed to decode
session object in %s on line %d
bool(true)
-array(3) {
- [u"foo"]=>
- int(1234567890)
- [u"bar"]=>
- unicode(5) "Blah!"
- [u"guff"]=>
- float(123.456)
-}
-bool(true)
-Done
+unicode(17) "foo|i:1234567890;"
+Warning: session_destroy(): Trying to destroy uninitialized session in %s on
line %d
+bool(false)
+Done
http://cvs.php.net/viewvc.cgi/php-src/ext/session/tests/session_encode_variation3.phpt?r1=1.3&r2=1.4&diff_format=u
Index: php-src/ext/session/tests/session_encode_variation3.phpt
diff -u php-src/ext/session/tests/session_encode_variation3.phpt:1.3
php-src/ext/session/tests/session_encode_variation3.phpt:1.4
--- php-src/ext/session/tests/session_encode_variation3.phpt:1.3 Tue May
27 12:17:39 2008
+++ php-src/ext/session/tests/session_encode_variation3.phpt Wed Aug 6
05:34:55 2008
@@ -31,4 +31,3 @@
unicode(34) "foo|a:3:{i:0;i:1;i:1;i:2;i:2;i:3;}"
bool(true)
Done
-
http://cvs.php.net/viewvc.cgi/php-src/ext/session/tests/session_encode_variation4.phpt?r1=1.3&r2=1.4&diff_format=u
Index: php-src/ext/session/tests/session_encode_variation4.phpt
diff -u php-src/ext/session/tests/session_encode_variation4.phpt:1.3
php-src/ext/session/tests/session_encode_variation4.phpt:1.4
--- php-src/ext/session/tests/session_encode_variation4.phpt:1.3 Tue May
27 12:17:39 2008
+++ php-src/ext/session/tests/session_encode_variation4.phpt Wed Aug 6
05:34:55 2008
@@ -33,4 +33,3 @@
unicode(52) "foo|a:3:{i:0;i:1;i:1;i:2;i:2;i:3;}guff|R:1;blah|R:1;"
bool(true)
Done
-
http://cvs.php.net/viewvc.cgi/php-src/ext/session/tests/session_encode_variation5.phpt?r1=1.3&r2=1.4&diff_format=u
Index: php-src/ext/session/tests/session_encode_variation5.phpt
diff -u php-src/ext/session/tests/session_encode_variation5.phpt:1.3
php-src/ext/session/tests/session_encode_variation5.phpt:1.4
--- php-src/ext/session/tests/session_encode_variation5.phpt:1.3 Tue May
27 12:17:39 2008
+++ php-src/ext/session/tests/session_encode_variation5.phpt Wed Aug 6
05:34:55 2008
@@ -33,4 +33,3 @@
unicode(64) "data|a:5:{i:0;i:1;i:1;i:2;i:2;i:3;U:3:"foo";R:1;U:4:"blah";R:1;}"
bool(true)
Done
-
http://cvs.php.net/viewvc.cgi/php-src/ext/session/tests/session_encode_variation7.phpt?r1=1.3&r2=1.4&diff_format=u
Index: php-src/ext/session/tests/session_encode_variation7.phpt
diff -u php-src/ext/session/tests/session_encode_variation7.phpt:1.3
php-src/ext/session/tests/session_encode_variation7.phpt:1.4
--- php-src/ext/session/tests/session_encode_variation7.phpt:1.3 Tue May
27 12:17:39 2008
+++ php-src/ext/session/tests/session_encode_variation7.phpt Wed Aug 6
05:34:55 2008
@@ -32,4 +32,3 @@
string(0) ""
bool(true)
Done
-
http://cvs.php.net/viewvc.cgi/php-src/ext/session/tests/session_encode_variation8.phpt?r1=1.2&r2=1.3&diff_format=u
Index: php-src/ext/session/tests/session_encode_variation8.phpt
diff -u php-src/ext/session/tests/session_encode_variation8.phpt:1.2
php-src/ext/session/tests/session_encode_variation8.phpt:1.3
--- php-src/ext/session/tests/session_encode_variation8.phpt:1.2 Tue Apr
29 08:57:10 2008
+++ php-src/ext/session/tests/session_encode_variation8.phpt Wed Aug 6
05:34:55 2008
@@ -29,11 +29,12 @@
--EXPECTF--
*** Testing session_encode() : variation ***
-Warning: session_start(): Unknown session.serialize_handler. Failed to decode
session object in %s on line %d
-bool(true)
+Warning: session_start(): Cannot find serialization handler 'blah' - session
startup failed in %s on line 13
+bool(false)
-Warning: session_encode(): Unknown session.serialize_handler. Failed to encode
session object in %s on line %d
+Warning: session_encode(): Cannot encode non-existent session in %s on line 15
string(0) ""
-bool(true)
-Done
+Warning: session_destroy(): Trying to destroy uninitialized session in %s on
line 17
+bool(false)
+Done
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php