session和验证码不同步的问题,高手指点下,
为什么我session获取的取总比验证图片里的慢一步啊,高手指点下,加分!~
我的验证码用servlet写的,代码:
package checkDraw;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import com.sun.image.codec.jpeg.*;
import java.awt.*;
import com.sun.image.codec.jpeg.*;
import java.awt.image.BufferedImage;
import java.awt.image.DataBuffer;
import java.awt.geom.GeneralPath;
import javax.swing.*;
import java.math.*;
public class checkServlet
extends HttpServlet {
//Process the HTTP Get request
public void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
response.setContentType(request.getContentType());
response.setContentType( "image/jpeg "); //必须设置ContentType为image/jpeg
response.setHeader( "Pragma ", "No-cache ");
response.setHeader( "Cache-Control ", "no-cache ");
response.setDateHeader( "Expires ", 0);
HttpSession session = request.getSession(true);
int length = 4; //设置默认生成4个数字
Date d = new Date();
long lseed = d.getTime();
Random r = new Random(); //设置随机种子
if (request.getParameter( "length ") != null) {
try {
length = Integer.parseInt(request.getParameter( "length "));
}
catch (NumberFormatException e) {
}
}
StringBuffer str = new StringBuffer();
for (int i = 0; i < length; i++) {
str.append(r.nextInt(9)); //生成随机数字
}
//可以在此加入保存验证码的代码
session.setAttribute( "Rand ",String.valueOf(str));
//创建内存图像
BufferedImage bi = new BufferedImage(40, 16, BufferedImage.TYPE_INT_RGB);
Graphics2D g = bi.createGraphics();
g.clearRect(0, 0, 16, 40);
g.setColor(Color.RED);
g.drawString(str.toString(), 4, 12);
try {
//使用JPEG编码,输出到response的输出流
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(response.
getOutputStream());
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);
param.setQuality(1.0f, false);
encoder.setJPEGEncodeParam(param);
encoder.encode(bi);
}
catch (Exception ex) {
}
下面是我在JSP页面获取的代码:
<html>
<body>
<form action= "ConServlet " name= "form1 " method= "post ">
<table width= "228 " height= "244 " border= "1 " align= "center ">
<!--DWLayoutTable-->
<tr>
<td colspan= "2 "> 专业班主任务周计划系统 </td>
</tr>
<tr>
<td width= "65 "> 用户名: </td>
<td width= "147 "> <input type= "text " name= "name " size= "20 " /> </td>
</tr>
<tr>
<td> 密 码: </td>
<td> <input type= "password " name= "password " size= "20 " /> </td>
</tr>
<tr>
<td height= "39 " colspan= "2 " valign= "top "> <table width= "100% " border= "0 " cellpadding= "0 " cellspacing= "0 ">
<!--DWLayoutTable-->
<tr>
<td width= "68 " height= "35 " align= "center " valign= "middle "> <div align= "left "> 验证码: </div> </td>
<td width= "77 " align= "center " valign= "middle "> <input type= "text " name= "c_code " size= "10 "> </td>
<td width= "73 " rowspan= "2 " align= "center " valign= "middle "> <img src= "checkServlet " alt= "看不清楚?点击更换验证码 " width= "50 " height= "26 " align= "middle " onclick= "this.src= 'checkServlet ' "/>
<!-- 下面代码是为了检验是否与验证码相同-->
<% String random = (String) session.getAttribute( "Rand ");
out.println(random);
%>
</td>
</tr>
<tr>
<td height= "1 "> </td>
<td> </td>
</tr>
</table> </td>
</tr>
<tr>
<td colspan= "2 ">
<input type= "button " value= "提交 " onClick= "check() ">
<input type= "reset " value= "重填 "> </td>
</tr>
</table>
</form>
</body>
</html>
<script language= "javascript ">
function check()
{
if(document.form1.c_code.value!= " <%=session.getAttribute( "code ")%> ")
{
alert( "验证码输入错误! ");
socument.form1.c_code.focus();
return;
}
document.form1.submit();
}
[解决办法]
啥意思?哪里不同步?把现象说明白.