下面是 ASP.NET 中用于创建会话 id 的实现(我已经解释过)。
编辑(RNG 是共享的):
static _randgen = new RNGCryptoServiceProvider();
string GetSessionId()
{
var buffer = new byte [15];
//fill the buffer with random bytes
randgen.GetBytes(buffer);
//turn the bytes into a string of letters and numbers (no unsafe chars)
string encoding = Encode(buffer);
return encoding;
}
上的文档RNGCryptoServiceProvider.GetBytes
说它是线程安全的,但是尚不清楚这意味着哪种线程安全。它只是保证没有死锁还是保证两个线程将获得不同的值?是否可能存在 2 个请求会拉取相同会话 ID 的竞争条件?