扫码关注官方订阅号
我不知道PHP的session id是基于哪种算法,但是不管什么算法,如果我有多台php web共享一个session池,那么php在生成这个session id的时候是不是有一定几率会产生冲突?因为这几台服务器都不知道对方生成了哪些id
闭关修行中......
不会。
源码 https://raw.githubusercontent.com/php/php-src/master/ext/session/session.c
php_session_create_id
PHPAPI zend_string *php_session_create_id(PS_CREATE_SID_ARGS) /* {{{ */ { // 散列算法 md5 sha1 PHP_MD5_CTX md5_context; PHP_SHA1_CTX sha1_context; #if defined(HAVE_HASH_EXT) && !defined(COMPILE_DL_HASH) void *hash_context = NULL; #endif unsigned char *digest; int digest_len; char *buf; struct timeval tv; // 时间 zval *array; zval *token; // 令牌 token zend_string *outid; char *remote_addr = NULL; //看着熟悉,这个值就是$_SERVER['REMOTE_ADDR']的值 gettimeofday(&tv, NULL); ...... /* maximum 15+19+19+10 bytes */ spprintf( &buf, // 生成的 session_id 0, "%.15s%ld" ZEND_LONG_FMT "%0.8F", remote_addr ? remote_addr : "", tv.tv_sec, // 时间 (zend_long)tv.tv_usec, // 毫秒 php_combined_lcg(TSRMLS_C) * 10 // 随机数 ); // 后面就是各种散列算法
所以我觉得,除非有非法攻击者,否则应该不会。
但是,即使 MD5 SHA 算法,都可能冲突。如果服务器并发非常大,可以考虑自己实现一个 session 算法。
当然有可能,即使是一台都有可能。
理论上,也许会。实际上,不会。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
不会。
源码 https://raw.githubusercontent.com/php/php-src/master/ext/session/session.c
php_session_create_id此函数负责生成 session id所以我觉得,除非有非法攻击者,否则应该不会。
但是,即使 MD5 SHA 算法,都可能冲突。如果服务器并发非常大,可以考虑自己实现一个 session 算法。
当然有可能,即使是一台都有可能。
理论上,也许会。实际上,不会。