php5 fpm池会话文件冲突的可能性?

php5 fpm池会话文件冲突的可能性?,php,session,Php,Session,在不同的php5 fpm应用程序池下运行的PHP是否可能(无论概率多么低)导致会话文件名发生冲突?我想将会话存储路径保留在每个池的默认位置,我只是想确保这不可能。。我找不到专门针对这一问题的文档。简短回答:当一颗超新星爆炸时,连续3次被闪电击中,你中奖的几率比地球所能看到的要大(不考虑光传播所需的时间)。即使它以某种方式做到了,它也会很快被其他东西(其他一些检查失败)失效。所以这不是你必须担心的事情 详细回答:好吧,我深入研究了PHP源代码,首先我应该说,即使有可能,它发生的可能性也非常小。首先

在不同的php5 fpm应用程序池下运行的PHP是否可能(无论概率多么低)导致会话文件名发生冲突?我想将会话存储路径保留在每个池的默认位置,我只是想确保这不可能。。我找不到专门针对这一问题的文档。

简短回答:当一颗超新星爆炸时,连续3次被闪电击中,你中奖的几率比地球所能看到的要大(不考虑光传播所需的时间)。即使它以某种方式做到了,它也会很快被其他东西(其他一些检查失败)失效。所以这不是你必须担心的事情

详细回答:好吧,我深入研究了PHP源代码,首先我应该说,即使有可能,它发生的可能性也非常小。首先,随机数生成器是非常随机的。因此,为了实现这一点,两个CPU核上的两个独立进程必须以某种方式生成完全相同的随机会话字符串,其中包括人员的IP地址和添加到随机数中的微秒时间(mmm高精度时钟)。单凭这些变量就有可能发生碰撞,这几乎是不可能的。但更进一步,其中一个进程必须创建会话并验证文件不存在,然后在创建文件之前,另一个进程也必须这样做。所以它必须在微秒到纳秒之间发生。除非真的发生了不幸的上下文切换,否则检查文件的动作甚至与在代码中创建文件的动作都不接近。请记住,这都是用C代码完成的,所以速度很快。磁盘速度并不是一个真正的问题,因为文件创建本质上是原子的,并且存储在硬盘驱动器的一级缓存中

下面是./ext/session/mod_files.c中的重要函数

/*
 * Create session ID.
 * PARAMETERS: PS_CREATE_SID_ARGS in php_session.h
 * RETURN VALUE: Valid session ID(zend_string *) or NULL for FAILURE.
 *
 * PS_CREATE_SID_FUNC() must check collision. i.e. Check session data if
 * new sid exists already.
 * *mod_data is guaranteed to have non-NULL value.
 * NOTE: Default php_session_create_id() does not check collision. If
 * NULL is returned, session module create new ID by using php_session_create_id().
 * If php_session_create_id() fails due to invalid configuration, it raises E_ERROR.
 * NULL return value checks from php_session_create_id() is not required generally.
 */
PS_CREATE_SID_FUNC(files)
因此,首先,它非常努力地创建SID,然后检查文件,以确保没有冲突。如果此函数连续三次失败,并且发生了其他一些几乎不可能的疯狂情况,则它可能会尝试创建SID,而不检查已经存在的类似会话。要实现这一点,必须启用php严格模式,并且检查文件必须再失败2次


我不想说得更详细:-)

简短回答:当一颗超新星爆炸时,你有更多的机会在连续3次闪电击中时中奖,而地球却看不到(不考虑光传播所需的时间)。即使它以某种方式做到了,它也会很快被其他东西(其他一些检查失败)失效。所以这不是你必须担心的事情

详细回答:好吧,我深入研究了PHP源代码,首先我应该说,即使有可能,它发生的可能性也非常小。首先,随机数生成器是非常随机的。因此,为了实现这一点,两个CPU核上的两个独立进程必须以某种方式生成完全相同的随机会话字符串,其中包括人员的IP地址和添加到随机数中的微秒时间(mmm高精度时钟)。单凭这些变量就有可能发生碰撞,这几乎是不可能的。但更进一步,其中一个进程必须创建会话并验证文件不存在,然后在创建文件之前,另一个进程也必须这样做。所以它必须在微秒到纳秒之间发生。除非真的发生了不幸的上下文切换,否则检查文件的动作甚至与在代码中创建文件的动作都不接近。请记住,这都是用C代码完成的,所以速度很快。磁盘速度并不是一个真正的问题,因为文件创建本质上是原子的,并且存储在硬盘驱动器的一级缓存中

下面是./ext/session/mod_files.c中的重要函数

/*
 * Create session ID.
 * PARAMETERS: PS_CREATE_SID_ARGS in php_session.h
 * RETURN VALUE: Valid session ID(zend_string *) or NULL for FAILURE.
 *
 * PS_CREATE_SID_FUNC() must check collision. i.e. Check session data if
 * new sid exists already.
 * *mod_data is guaranteed to have non-NULL value.
 * NOTE: Default php_session_create_id() does not check collision. If
 * NULL is returned, session module create new ID by using php_session_create_id().
 * If php_session_create_id() fails due to invalid configuration, it raises E_ERROR.
 * NULL return value checks from php_session_create_id() is not required generally.
 */
PS_CREATE_SID_FUNC(files)
因此,首先,它非常努力地创建SID,然后检查文件,以确保没有冲突。如果此函数连续三次失败,并且发生了其他一些几乎不可能的疯狂情况,则它可能会尝试创建SID,而不检查已经存在的类似会话。要实现这一点,必须启用php严格模式,并且检查文件必须再失败2次

我不想说得更详细了:-)