如何生成会话标识符?

时间:2010-03-23 18:37:14

标签: security random guid unique sessionid

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

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

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

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

编辑:

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

2 个答案:

答案 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

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