会话ID,UUID和GUID以及ID一般

时间:2011-06-01 21:34:46

标签: php session-state uniqueidentifier sessionid

我有个主意。由于我不知道的原因,它可能会很糟糕,但我非常感谢您对此的反馈!

我们一直在PHP项目中使用Session ID。并且4年来第一次生成了重复的sessionid。幸运的是,我随机决定去查看客户表,因为我很无聊,发现在sessionid列中有一个重复的条目,并在发生任何实际问题之前对其进行了更改和引用。

导致(或带领?)我问自己这个问题:

基本上,任何类型的ID,无论是会话ID,uuid还是guid最终都可以复制,因为它们的长度不是无限的。所以我开始思考,因为我们永远不希望再发生这种情况。

我想,如果我们使用date 时间的组合作为标识符怎么办?这不是“随机”的,但它可以解决重复问题。例如:

14th of May 2011 04:36:05PM 

如果用作标识符,可以更改为:

14052011163605

这种身份证明永远不会重复的原因是因为没有日期,再加上未来的时间将与过去或现在的时间相同。

而且,在我们的案例中,这些ID并不是任何人都可以看到的,没有理由它是随机的,是吗?

我很想听听你对此的看法,以及你如何处理这样的情况。什么是生成[实际]唯一ID的最佳方法?

4 个答案:

答案 0 :(得分:4)

  

这种身份证明永远不会重复的原因是因为没有日期,再加上未来的时间将与过去或现在的时间相同。

如果你只有一个用户,那就是这样。

答案 1 :(得分:3)

UUID / GUID非常大(大于可见宇宙中的粒子数)

您的日期/时间解决方案将在高负载下失败。当我每秒需要100多个新ID时会发生什么?

答案 2 :(得分:2)

为什么不将会话ID列设为唯一列,然后在遇到约束违规错误时生成新的会话ID?这样,数据库就会以与您相同的方式为您找到这个问题(作为奖励,它也可以修复它)。

答案 3 :(得分:2)

UUID已经基于纳秒时间间隔生成(请参阅此wikipeida article)。如果您使用的是PHP,我建议您使用此页面来了解如何根据您的使用情况生成不同的版本:

http://php.net/manual/en/function.uniqid.php

您无法保证唯一性的原因是您 最终为包含您的UUID的实际字符串/变量选择大小限制,因此始终存在重复的可能性。但是,考虑到UUID的可能性,这实际上是不可能的。

我同意其他海报......这可能不会发生。你是如何实际生成唯一ID的?您确定您的代码是否正确创建它们?