C#中的Random.Next()方法一直返回0
2008-12-11 15:59
302 查看
昨天网站被人DOS攻击,网站的同时连接数达到了1000多,我的程序是一个投票的程序,在投票之前需要做验证码认证,不过验证码是放在Cookie中的,这给了作弊者一个可乘之机。在作弊者发动大规模作弊攻击时,网站的验证码出现了很奇怪的现象,总是返回AAAA,也就是说Random.Next(int number)方法总是返回0了。这是怎么回事呢?
通过google查出Random确有这个毛病,原因是Random本身是非线程安全的,而在Asp.net中是多线程环境,Random.Next方法在多线程环境下跑到一定时候,就会出现这种情况。
可以参考这篇blog:http://blogs.msdn.com/brada/archive/2003/08/14/50226.aspx
他推荐使用RandomNumberGenerator类,我当时情急之中,直接使用了Guid.NewGuid().ToString(0,4)了。或者通过下面的类,编程线程安全的调用Random类的Next方法。
class ThreadSafeRandom
{
private static Random random = new Random();
public static int Next()
{
lock (random)
{
return random.Next();
}
}
}
有关Random的更多情况可以参考这个随笔。
通过google查出Random确有这个毛病,原因是Random本身是非线程安全的,而在Asp.net中是多线程环境,Random.Next方法在多线程环境下跑到一定时候,就会出现这种情况。
可以参考这篇blog:http://blogs.msdn.com/brada/archive/2003/08/14/50226.aspx
他推荐使用RandomNumberGenerator类,我当时情急之中,直接使用了Guid.NewGuid().ToString(0,4)了。或者通过下面的类,编程线程安全的调用Random类的Next方法。
class ThreadSafeRandom
{
private static Random random = new Random();
public static int Next()
{
lock (random)
{
return random.Next();
}
}
}
有关Random的更多情况可以参考这个随笔。
相关文章推荐
- C# 中的random.Next方法
- 獲取多個返回的結果集(關於DataReader對象的NextResult方法的使用)
- C#在Compare时出错:IComparer (或其依赖的 IComparable 方法)未返回零
- C#返回多少分钟之前或多少分钟之后时间的方法
- C#一个方法返回多个值示例
- C#执行CMD命令并接收返回结果的实现方法
- JQuery的Ajax使用Get,Post方法调用C#WebService并返回数据
- C# 反射获得类名,私有方法,动态执行方法,返回多个值
- 关于C#操作PPT时遇到的“对COM组件的调用返回了错误HRESULT E_FAIL”错误的解决方法
- 【C#】允许泛型方法<T>返回空值Null
- C# 方法返回值的个数
- webBrowser执行js的方法,并返回值,c#后台取值
- 解决方法:Mac Android studio 创建项目是下载gradle一直不返回
- ajax请求返回数据成功但是一直进入error方法中
- C#调用C++方法,C#使用c++方法返回类或结构体。
- java Random.nextInt()方法
- C#反射动态调用dll中的方法,并返回结果
- C#操作FTP报错,远程服务器返回错误:(550)文件不可用(例如,未找到文件,无法访问文件)的解决方法
- C#反射动态调用dll中的方法,并返回结果[转]
- C#调用C++方法,C#使用c++方法返回类或结构体