jsp/ajax/servlet验证码
发布网友
发布时间:2022-04-23 22:41
我来回答
共2个回答
热心网友
时间:2023-07-29 23:04
第一个问题:验证码图片用JSP或Servlet都行。
第二个问题:可能是缓存的问题。设置不缓存就OK。如果还不行那么访问验码的时候加一个随机数的参数,提示服务器是不同的请求。如果还不行欢迎交流~
下面是产生验证码JSP代码:
<%@ page contentType="image/jpeg" language="java" import="java.util.*,java.awt.*,java.awt.image.*,javax.imageio.*" pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%!
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);
}
%>
<%
//设置页面不缓存
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires",0);
//在内存中创建图像
int width = 55,height=20;
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(0,0,width,height);
//设置字体
g.setFont(new Font("Times New Roman",Font.PLAIN,18));
//随即产生干扰线
g.setColor(getRandColor(150,200));
for(int i=0; i< 155; i++){
int x = random.nextInt(width);
int y = random.nextInt(height);
int x1= random.nextInt(width);//random.nextInt(12);
int y1 = random.nextInt(height);//random.nextInt(12);
g.drawLine(x,y,x+x1,x+y1);
}
//随机产生认证码,4位数字
String sRand="";
for(int i = 0; i < 4 ; i++){
String rand = String.valueOf(random.nextInt(10));
sRand+=rand;
//将认证码显示到图片中
g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
g.drawString(rand,13*i+6,16);
}
session.setAttribute("authcode",sRand);
//图像生效
g.dispose();
//输出图像到页面
ImageIO.write(image,"JPEG",response.getOutputStream());
out.clear();
out = pageContext.pushBody();
%>
登陆页面代码:
<%@ page contentType="text/html; charset=utf-8" language="java"
import="java.sql.*;"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>首页</title>
</head>
<%
String incode = request.getParameter("code");
String rightcode = (String) session.getAttribute("authcode");
if (incode != null && rightcode != null) {
if (incode.equals(rightcode)) {
out.println("验证码输入正确");
} else
out.println("验证码输入不正确,请重新输入");
}
%>
<body>
<form action="index.jsp" method="post">
用户名:
<input type="text" name="u" />
<br />
密码:
<input type="password" name="p" />
<br />
验证码:
<input type="text" name="code" />
<br />
<img src="authcode.jsp" id="safecode" onclick="reloadcode();" />
<a href="" onclick="reloadcode();return false">看不清?换一张</a>
<br />
<input type="submit" value="登陆" />
</form>
<script type="text/javascript">
function reloadcode(){
var verify=document.getElementById('safecode');
verify.setAttribute('src','authcode.jsp?'+Math.random());
//这里必须加入随机数不然地址相同我发重新加载
}
</script>
</body>
</html>
热心网友
时间:2023-07-29 23:04
第一个问题:我用的也是别人的代码,在网上找的;是使用jquery实现的即时刷新,以及验证;
你要是要的话就QQ练习我了、、、935897194
第二个:每次更新验证码的时候就在session中重新保存验证码的值