大多数Web应用程序依赖于与用户的某种会话(例如,保留登录状态)。会话ID在用户的浏览器中保存为cookie,并随每个请求一起发送。
为了难以猜测下一个用户的会话,这些会话ID需要稀疏且有些随机。它也必须是独一无二的。
问题是 - 如何有效地生成稀疏且唯一的会话ID?
This问题对于唯一的随机数有一个很好的答案,但它似乎不能扩展到大范围的数字,只是因为数组最终会占用大量内存。
编辑:
答案 0 :(得分:2)
如果您希望它们是独一无二且不容易猜到的,为什么不将它们结合起来?
取一个计数器(为新会话生成唯一值)并附加CSPRNG生成的随机位。确保正确minimum number of bits。
这应该在一个服务器场上也可以顺利运行:只需在服务器本地的计数器前面添加一个对该服务器唯一的id。
SSSSCCCCCRRRRRR
其中S
是创建会话的服务器标识,C
是服务器本地计数器,R
是加密随机。
(免责声明:字母数量与您应以任何方式使用的数字/位数不对应。)
独特,安全。
答案 1 :(得分:0)
如果您使用.NET,可以查看RNGCryptoServiceProvider。
http://www.informit.com/guides/content.aspx?g=dotnet&seqNum=775
这是一种生成随机数的加密安全方式。