Skip to content

Commit b36ae74

Browse files
author
Yasuo Ohgaki
committed
Revert "Revert "Merge RFC https://wiki.php.net/rfc/session-create-id""
This reverts commit 663f1c8.
1 parent 7505eaf commit b36ae74

File tree

1 file changed

+19
-4
lines changed

1 file changed

+19
-4
lines changed

ext/session/session.c

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2014,7 +2014,6 @@ static PHP_FUNCTION(session_regenerate_id)
20142014

20152015
/* {{{ proto void session_create_id([string prefix])
20162016
Generate new session ID. Intended for user save handlers. */
2017-
#if 0
20182017
/* This is not used yet */
20192018
static PHP_FUNCTION(session_create_id)
20202019
{
@@ -2036,7 +2035,20 @@ static PHP_FUNCTION(session_create_id)
20362035
}
20372036

20382037
if (PS(session_status) == php_session_active) {
2039-
new_id = PS(mod)->s_create_sid(&PS(mod_data));
2038+
int limit = 3;
2039+
while (limit--) {
2040+
new_id = PS(mod)->s_create_sid(&PS(mod_data));
2041+
if (!PS(mod)->s_validate_sid) {
2042+
break;
2043+
} else {
2044+
/* Detect collision and retry */
2045+
if (PS(mod)->s_validate_sid(&PS(mod_data), new_id) == FAILURE) {
2046+
zend_string_release(new_id);
2047+
continue;
2048+
}
2049+
break;
2050+
}
2051+
}
20402052
} else {
20412053
new_id = php_session_create_id(NULL);
20422054
}
@@ -2051,9 +2063,7 @@ static PHP_FUNCTION(session_create_id)
20512063
}
20522064
smart_str_0(&id);
20532065
RETVAL_NEW_STR(id.s);
2054-
smart_str_free(&id);
20552066
}
2056-
#endif
20572067
/* }}} */
20582068

20592069
/* {{{ proto string session_cache_limiter([string new_cache_limiter])
@@ -2324,6 +2334,10 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_session_id, 0, 0, 0)
23242334
ZEND_ARG_INFO(0, id)
23252335
ZEND_END_ARG_INFO()
23262336

2337+
ZEND_BEGIN_ARG_INFO_EX(arginfo_session_create_id, 0, 0, 0)
2338+
ZEND_ARG_INFO(0, prefix)
2339+
ZEND_END_ARG_INFO()
2340+
23272341
ZEND_BEGIN_ARG_INFO_EX(arginfo_session_regenerate_id, 0, 0, 0)
23282342
ZEND_ARG_INFO(0, delete_old_session)
23292343
ZEND_END_ARG_INFO()
@@ -2408,6 +2422,7 @@ static const zend_function_entry session_functions[] = {
24082422
PHP_FE(session_module_name, arginfo_session_module_name)
24092423
PHP_FE(session_save_path, arginfo_session_save_path)
24102424
PHP_FE(session_id, arginfo_session_id)
2425+
PHP_FE(session_create_id, arginfo_session_create_id)
24112426
PHP_FE(session_regenerate_id, arginfo_session_regenerate_id)
24122427
PHP_FE(session_decode, arginfo_session_decode)
24132428
PHP_FE(session_encode, arginfo_session_void)

0 commit comments

Comments
 (0)