生成唯一的会话ID的最佳方法是什么?

3
我希望生成一个16位的字母数字混合会话ID字符串。有什么最好的方法可以保证每次生成的字符串都是唯一的吗?
注意:我将使用C++来生成会话ID。
2个回答

7
通常情况下,您可以使用任何语言/操作系统提供的服务创建GUID。常见的GUID长度为16 字节,用十六进制表示为32个字符。您可以对其进行base64编码,并将其缩小一些(约22个字符)。但您真的需要恰好16 字符吗?

在UNIX中,我如何使用C++创建一个GUID?是否有可用的C++ API? - undefined
在Linux和其他一些平台上,您可以使用libuuid:http://linux.die.net/man/3/libuuid 或者您可以使用uuidgen shell命令。 - undefined
我在几个不同的地方(包括 Stack Overflow)读到过,GUID 是可预测的。在将其用作会话 ID 时,这是否会引入安全风险? - undefined
1
@aggregate1166877:GUID(全局唯一标识符)本身并没有固定的可预测性,这完全取决于生成方式。一些常见的操作系统服务会基于网络适配器的MAC地址和时间戳来生成GUID,这些是可预测的。如果你使用真正的随机数生成器来生成GUID,那么它们就是不可预测的。 - undefined

0
使用GUID。如何生成一个GUID将取决于您所运行的平台。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接