图片验证的问题..在线等.

only__happy 2009-10-06 04:15:21
为什么保存在session中的值与图片的值不一致..

我在页面中输出session的值 ..总比图片里面的值慢一拍!!


...全文
59 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
palosky 2009-10-07
  • 打赏
  • 举报
回复
你看我这个可以的!

这是servlet

package servlet;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class ImageCode extends HttpServlet {

/**
*
*/
private static final long serialVersionUID = 1L;

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);

// 定义图片的高度和宽度
int width = 200;
int height = 40;

// 创建一个图像对象
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);

// 得到图像的环境对象
Graphics g = image.createGraphics();

Random random = new Random();

// 用随机色填充图像背景
g.setColor(getRandomColor(160, 250));
g.fillRect(0, 0, width, height);
for (int i = 0; i < 5; i++) {
g.setColor(getRandomColor(50, 100));
int x = random.nextInt(width);
int y = random.nextInt(height);
g.drawOval(x, y, 6, 6);
}

//设置字体
String[] fonts = {"Times New Roman","Georgia","Sylfaen"};
String font=fonts[random.nextInt(fonts.length)];
//System.out.println(font);
g.setFont(new Font(font, Font.LAYOUT_LEFT_TO_RIGHT, 33));

//准备画随机数
String sRand = "";// 随机字符串
String chars = "123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char[] ch = chars.toCharArray();
for (int i = 0; i < 6; i++) {
// 生成6个数字或者字符
String rand = String.valueOf(ch[random.nextInt(chars.length())]);
sRand += rand;
//System.out.println(sRand);

int red=20 + random.nextInt(80);
int green=20 + random.nextInt(100);
int blue=20 + random.nextInt(90);

// 设置字体的颜色
g.setColor(new Color(red,green,blue));

// 将随机数字画在图像上
g.drawString(rand, 25*(i+1), 34);//在这里改变相邻字母的间距

// 生成干扰线
for (int k = 0; k < 12; k++) {
int x = random.nextInt(width);
int y = random.nextInt(height);
int x1 = random.nextInt(9);
int y1 = random.nextInt(9);
g.drawLine(x, y, x + x1, y + y1);
}
}

//将随机生成的字符串写入session
HttpSession session=request.getSession();
session.setAttribute("code", sRand);
g.dispose();//使图像生效
ImageIO.write(image, "JPEG", response.getOutputStream());//输出图像到页面
}

/**
* 产生一个随机颜色
*
* @param fc
* 颜色分量最小值
* @param bc
* 颜色分量最大值
*/
public Color getRandomColor(int fc, int bc) {
Random random = new Random();
int t=random.nextInt(8);

int[] r={247,243,201,225,220,205,247,236};
int[] g={248,223,249,238,238,245,242,243};
int[] b={216,206,218,225,204,209,185,189};

return new Color(r[t], g[t], b[t]);
//return new Color(r,g,b);
}

}

这是主页index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<html>
<head>
<title>index.jsp</title>
</head>

<body>
<form name="form" action="result.jsp" method="post">
验证码:
<input type="text" name="code">
<p>
<img src="/Common/ImageCode" border="1px"
onclick="this.src='/Common/ImageCode?num='+Math.random();"
title="看不清?单击图片重新获取" name="img"><p>
<input type="submit" value="提交">
</form><br>
<%
out.println("当前时间: "+new Date());
%>
</body>
</html>

这是提交后的页面result.jsp

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<html>
<head>
<title>result.jsp</title>
</head>

<body>
<%
String code=(String)session.getAttribute("code");
String inputcode=request.getParameter("code");
inputcode=inputcode.toUpperCase();
out.println("验证码:"+code);
out.println("用户输入:"+inputcode);
%>
</body>
</html>
我写的是忽略大小写的验证码。
pj287072728 2009-10-07
  • 打赏
  • 举报
回复
学习学习。。。
流星谜 2009-10-07
  • 打赏
  • 举报
回复
我以前也发现过这种情况,不过不影响验证。
huaping100 2009-10-06
  • 打赏
  • 举报
回复
调session的时候再刷新一下页面不就出来了

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧