以下は、セッション ID を作成するための ASP.NET での実装です (言い換えました)。
編集 (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 つのスレッドが異なる値を取得することを保証しますか? 2 つのリクエストが同じセッション ID を取得するという競合状態が発生する可能性はありますか?