首页 > 解决方案 > uniqid() 的危险是它创建相同的 ID 在同一微秒触发,还是后续的微时间会导致冲突?

问题描述

如果我多次调用 uniqid() 生成相同 ID 的问题并不是真正的问题。但是我不清楚在以后的时间点是否存在ID冲突的风险?我的意思是,从技术上讲,即使是正确的加密哈希也有可能发生冲突,但我认为 uniqid 特别容易受到影响是否正确?

标签: php

解决方案


结果基于以微秒为单位的时间。只要你在不同的微秒调用它,结果应该是不同的。

但是,如果将时钟重置为与上一次通话相同的时间,您将获得相同的结果。这是$more_entropy参数的值。如果添加此参数,它将在末尾添加一个随机字符串。时钟被重置为同一时间并且 RNG 产生相同随机字符串的机会微乎其微。服务器时钟向后跳也很不寻常;除非时间与正确的时间相差很远,否则时间校正通常通过改变时钟增量的速率来完成,因此它是单调的并且接近正确的时间。

在不同主机上以相同微秒生成的字符串,没有$more_entropy = true, 将是相同的。这就是$prefix参数的好处;您可以在那里使用特定于主机的东西来避免服务器之间的冲突。仅当 ID 需要全局唯一时才需要这样做,而不仅仅是在服务器中唯一。

如果使用$prefixand$more_entropy参数,则不必担心冲突。


推荐阅读