zoukankan      html  css  js  c++  java
  • C#中的Random.Next()方法一直返回0

    昨天网站被人DOS攻击,网站的同时连接数达到了1000多,我的程序是一个投票的程序,在投票之前需要做验证码认证,不过验证码是放在Cookie中的,这给了作弊者一个可乘之机。在作弊者发动大规模作弊攻击时,网站的验证码出现了很奇怪的现象,总是返回AAAA,也就是说Random.Next(int number)方法总是返回0了。这是怎么回事呢? 

    通过google查出Random确有这个毛病,原因是Random本身是非线程安全的,而在Asp.net中是多线程环境,Random.Next方法在多线程环境下跑到一定时候,就会出现这种情况。 

    可以参考这篇bloghttp://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的更多情况可以参考这个随笔

  • 相关阅读:
    【转】acm小技巧
    poj-1703-Find them, Catch them
    poj-1611-The Suspects
    poj-2236-Wireless Network
    hdu-4496-D-City
    hdu-1213-How Many Tables
    hdu-1856-More is better
    gcd和ex_gcd
    递归趣文
    算法实质【Matrix67】
  • 原文地址:https://www.cnblogs.com/yukaizhao/p/random_next_always_return_0.html
Copyright © 2011-2022 走看看