php - uniqid() 的危险是它创建相同的 ID 在同一微秒触发,还是后续的微时间会导致冲突?
问题描述
如果我多次调用 uniqid() 生成相同 ID 的问题并不是真正的问题。但是我不清楚在以后的时间点是否存在ID冲突的风险?我的意思是,从技术上讲,即使是正确的加密哈希也有可能发生冲突,但我认为 uniqid 特别容易受到影响是否正确?
解决方案
结果基于以微秒为单位的时间。只要你在不同的微秒调用它,结果应该是不同的。
但是,如果将时钟重置为与上一次通话相同的时间,您将获得相同的结果。这是$more_entropy
参数的值。如果添加此参数,它将在末尾添加一个随机字符串。时钟被重置为同一时间并且 RNG 产生相同随机字符串的机会微乎其微。服务器时钟向后跳也很不寻常;除非时间与正确的时间相差很远,否则时间校正通常通过改变时钟增量的速率来完成,因此它是单调的并且接近正确的时间。
在不同主机上以相同微秒生成的字符串,没有$more_entropy = true
, 将是相同的。这就是$prefix
参数的好处;您可以在那里使用特定于主机的东西来避免服务器之间的冲突。仅当 ID 需要全局唯一时才需要这样做,而不仅仅是在服务器中唯一。
如果使用$prefix
and$more_entropy
参数,则不必担心冲突。
推荐阅读
- powershell - PowerShell Parallels Jobs 速度改进
- google-cloud-platform - 如何以编程方式获取当前的谷歌资源价格?
- c - 包含结构数组的结构的动态分配
- python-3.x - 如何删除列表中的字符串?
- asp.net-mvc - 在 mvc EF6 项目中获取数据的方法 - 优点和不方便
- html - 在 django 中使盒子更宽
- python - "for x, u in enumerate(...)" 是什么意思?
- c# - 当您只有基类时,有没有办法使用子类属性?
- postgresql - 等待查询完成(从不完成)
- python - 使用索引列表索引 pandas DataFrame 并填充值