验证码和session不同步
wbj00 2007-06-19 04:29:08 验证码是在servlet中生成的,然后就放到session中,可页面取的时候怎么老是和servlet中的session不同步,也就是页面显示的验证码和从页面取出的验证码不一样,而且页面取出的总是上一次显示的,比如第一次显示的是"123",这时取出来的就不是“123”,刷新页面后再从session中取,取出来的才是"123",也就是说在页面从session中取出来的验证码总是比显示的验证码慢一拍,这是怎么回事???
另外servlet贴出来:
public class AuthImg extends HttpServlet {
private static final String CONTENT_TYPE="text/html;charset=gb2312";
private Font font=new Font("Times New Roman",Font.PLAIN,17);
public void init() throws ServletException{
super.init();
}
public Color getRandColor(int fc,int bc){
Random random=new Random();
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);
}
public void service(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires",0);
response.setContentType("image/jpeg");
int width=100;
int height=18;
BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
Graphics g=image.getGraphics();
Random random=new Random();
g.setColor(getRandColor(200,250));
g.fillRect(1,1,width-1,height-1);
g.setColor(new Color(102,102,102));
g.drawRect(0,0,width-1,height-1);
g.setFont(font);
g.setColor(getRandColor(160,200));
for(int i=0 ;i<155;i++){
int x=random.nextInt(width-1);
int y=random.nextInt(height-1);
int x1=random.nextInt(6)+1;
int y1=random.nextInt(12)+1;
g.drawLine(x,y,x+x1,y+y1);
}
for(int i=0 ;i<70;i++){
int x=random.nextInt(width-1);
int y=random.nextInt(height-1);
int x1=random.nextInt(12)+1;
int y1=random.nextInt(6)+1;
g.drawLine(x,y,x+x1,y+y1);
}
String rand="";
for(int i=0;i<6;i++){
int itmp=random.nextInt(26)+65;
char ctmp=(char)itmp;
rand+=String.valueOf(ctmp);
g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
g.drawString(String.valueOf(ctmp),15*i+10,16);
}
HttpSession session=request.getSession(true);
session.setAttribute("rand",rand);
g.dispose();
ImageIO.write(image,"JPEG",response.getOutputStream());
System.out.println(request.getSession().getAttribute("rand"));
}
public void destroy(){
}
}