1

大多数 Web 应用程序依赖于与用户的某种会话(例如,保留登录状态)。会话 ID 作为 cookie 保存在用户的浏览器中,并随每个请求一起发送。

为了让猜测下一个用户的会话变得困难,这些会话 ID 需要稀疏且有些随机。也必须是独一无二的。

问题是 -如何有效地生成稀疏且唯一的会话 ID?

这个问题对唯一随机数有一个很好的答案,但对于大范围的数字似乎不可扩展,仅仅是因为数组最终会占用大量内存。

编辑:

  • 就安全性(和随机性)而言,GUID 被认为是不安全的。
  • 核心问题是确保数字是唯一的,即它们不会重复并使其有效。
4

2 回答 2

2

如果您希望它们独一无二且不易猜到,为什么不将它们结合起来呢?

取一个计数器(为新会话生成唯一值)并附加由CSPRNG生成的随机位。确保正确获得所需的最小位数

这也应该在农场上正常工作:只需在服务器本地的计数器前加上该服务器唯一的 id。

SSSSCCCCCRRRRRR

S创建会话的服务器 ID在哪里,C是服务器本地计数器,并且R是加密随机数。

(免责声明:字母的数量与您应该以任何方式使用的位数/位数不对应。:)

独特、安全。

于 2010-03-23T19:14:27.717 回答
0

如果您使用的是 .NET,则可以查看 RNGCryptoServiceProvider。

http://www.informit.com/guides/content.aspx?g=dotnet&seqNum=775

这是一种生成随机数的密码安全方式。

于 2010-03-23T18:47:54.353 回答