因此,在进一步阅读之后,他们无法直接请求客户端浏览器重新生成新的会话 ID,即使我使用了 Session.Clear()、Session.RemoveAll() 或 Session.Abandon(),它也不会为我服务需要(您可以阅读这篇文章Link 中的差异,这是一个很好的阅读),所以在一天结束时,我使用 sessionid 作为通用字符串来识别页面请求末尾的更新语句的数据库记录所以我创建了一个函数,通过每次调用生成一个随机的 20 个字符串并将值分配给一个全局 var,这个 var 可以在我的插入/更新请求中使用,我创建的生成随机字符串的方法如下:-
public static string GenerateSessionID()
{
char[] characters = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".ToCharArray();
Random r = new Random();
System.Threading.Thread.Sleep(10);
string randomstring = "";
for (int i = 0; i < 20; i++)
{
randomstring += characters[r.Next(0, 60)].ToString();
}
return randomstring;
}
帮助理解代码
char[] characters = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".ToCharArray();
这行代码将创建一个 char 数组,包括所有大小写的数字字母,你可以放任何你想要的字符
Random r = new Random();
在这里你创建一个随机类的对象“r”
string randomstring = "";
只是创建一个字符串来保存生成的键的值
for (int i = 0; i < 20; i++)
你可以通过增加或减少“i”的最大值来定义随机密钥的长度
r.Next(0, 60)
方法 r.Next(0,60) 返回一个介于 0, 60 之间的随机数; r.下一个(最小,最大);你可以调用 r.Next() 它会得到任何随机数
我定义了最小值和最大值,因为我将使用生成的数字作为字符数组的索引
randomstring += characters[r.Next(0, 60)].ToString();
我想现在已经自我解释了,每次循环时,带有索引 random 的字符数组中的 char 将连接到 randomstring
System.Threading.Thread.Sleep(10);
现在我使用 thread.sleep 10 毫秒的原因是,当你不断调用随机 .next() 函数而没有任何中断时,它将返回相同的值,我简要阅读了它,我一直在减小值直到我达到 2 的毫秒数,有时它会产生一个新值,有时不是为了安全起见,我将值设置为 10
现在我在需要时调用该函数并将值放在字符串中并使用它