关于 验证码算法的 问题

本人的脑子不 怎么好使,写了一个关于验证码的算法,但是总是不能达到理想的效果,
验证码的算法大致采用的随机 4 个 random() 算法,来产生 4 位验证码,但是,在服务器不重启的条件下,不管怎么刷新验证页面,所得到的验证码都是一样,

我想问一下,我的思路有什么问题,是什么地方出了错误?
[b]问题补充:[/b]
说的有道理,但是我对你回答的

“...应用设定的Session时效.认为你在恶意刷新,而没有响应你的请求 ?”
中的“Session时效”,感觉好深奥,不懂,能不是解释一下,具体指的是什么东西?

是什么意思?

生成随机数
[code="java"]
public class DrawRandNumber
{

private static BufferedImage image = new BufferedImage(50, 20, 1);
private static DrawRandNumber instance = new DrawRandNumber();
public static final Random RANDOM = new Random();

private DrawRandNumber()
{
}

@SuppressWarnings("unused")
private void init()
{
}

public static DrawRandNumber getInstance()
{
    return instance;
}

public synchronized String writeRandNumber(int bits, int to, HttpServletRequest request)
    throws IOException
{
    String rand = getRandNumber(bits, to);
    setSession(request, rand);
    return rand;
}

public synchronized Image drawRandNumber(int bits, int to, HttpServletRequest request)
{
    String rand = getRandNumber(bits, to);
    Graphics g = image.getGraphics();
    refreshBgColor(g);
    g.setColor(getRandColor(20, 130));
    g.drawString(rand, 6, 16);
    g.dispose();
    setSession(request, rand);
    return image;
}

private String getRandNumber(int bits, int to)
{
    StringBuffer randBuffer = new StringBuffer();
    for(int i = 1; i <= bits; i++)
        randBuffer.append(RANDOM.nextInt(to));

    return randBuffer.toString();
}

private void setSession(HttpServletRequest request, String rand)
{
    request.getSession(true).setAttribute("rand",rand);
}

private void refreshBgColor(Graphics g)
{
    g.fillRect(0, 0, 50, 20);
    g.setFont(new Font("Times New Roman", 0, 18));
    g.setColor(getRandColor(160, 200));
    for(int i = 0; i < 100; i++)
    {
        int x = RANDOM.nextInt(50);
        int y = RANDOM.nextInt(20);
        int xl = RANDOM.nextInt(12);
        int yl = RANDOM.nextInt(12);
        g.drawLine(x, y, x + xl, y + yl);
    }

}

private Color getRandColor(int fc, int bc)
{
    if(fc > 255)
        fc = 255;
    if(bc > 255)
        bc = 255;
    int r = fc + RANDOM.nextInt(bc - fc);
    int g = fc + RANDOM.nextInt(bc - fc);
    int b = fc + RANDOM.nextInt(bc - fc);
    return new Color(r, g, b);
}

}

[/code]

servlet:
[code="java"]
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Cache-Control", "no-store");
response.setDateHeader("Expires", 0L);
response.setHeader("Pragma", "no-cache");
ImageIO.write((RenderedImage)DrawRandNumber.getInstance().drawRandNumber(4, 10, request), "JPEG", response.getOutputStream());
}
[/code]

调用,可点击刷新:
[code="java"]
[/code]

你要去求证,每次刷新页面,是否真的触发了你的随机的代码.

还是应用设定的Session时效,认为你在恶意刷新,而没有响应你的请求 ?