url重写实现session跟踪和一次性验证码的实现
来源:互联网 发布:沙发推荐 知乎 编辑:程序博客网 时间:2024/05/16 09:58
url重写实现session跟踪和一次性验证码的实现
利用URL重写实现Session跟踪
1、 Servlet规范中引入了一种补充的会话管理机制,它允许不支持Cookie的浏览器也可以与WEB服务器保持连续的会话。这种补充机制要求在响应消息的实体内容中必须包含下一次请求的超链接,并将会话标识号作为超链接的URL地址的一个特殊参数。
2、 将会话标识号以参数形式附加在超链接的URL地址后面的技术称为URL重写。如果在浏览器不支持Cookie或者关闭了Cookie功能的情况下,WEB服务器还要能够与浏览器实现有状态的会话,就必须对所有可能被客户端访问的请求路径(包括超链接、form表单的action属性设置和重定向的URL)进行URL重写。
3、 HttpServletResponse接口中定义了两个用于完成URL重写方法:
(1)、encodeURL方法
(2)、encodeRedirectURL方法
利用Session实现一次性验证码——>原理
1、 一次性验证码的主要目的就是为了限制人们利用工具软件来暴力猜测密码,其原理与利用Session防止表单重复提交的原理基本一样,只是将表单标识号变成了验证码的形式,并且要求用户将提示的验证码手工填写进一个表单字段中,而不是通过表单的隐藏字段自动回传给服务器。
2、 服务器程序接收到表单数据后,首先判断用户是否填写了正确的验证码,只有该验证码与服务器端保存的验证码匹配时,服务器程序才开始正常的表单处理流程。
3、 密码猜测工具要逐一尝试每个密码的前题条件是先输入正确的验证码,而验证码是一次性有效的,这样基本上就阻断了密码猜测工具的自动地处理过程。
验证码的实现
package com.csdn.session;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class CheckCodeServlet extendsHttpServlet {
publicCheckCodeServlet() {
super();
}
publicvoid destroy() {
super.destroy();// Just puts "destroy" string in log
}
privatestatic int WIDTH=60;
privatestatic int HEIGHT=20;
publicvoid doGet(HttpServletRequest request, HttpServletResponse response)
throwsServletException, IOException {
response.setContentType("image/jpeg");
ServletOutputStreamout=response.getOutputStream();
//PrintWriterout = response.getWriter();
HttpSessionsession=request.getSession();
response.setHeader("Pragma","no-cache");
response.setHeader("Cache-Controll","no-cache");
response.setIntHeader("Expires",0);
//背景
BufferedImagebi=new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_ARGB);
Graphicsg=bi.getGraphics();
//g.drawLine(0,0, 10,10);
drawBackground(g);
//随机产生验证码
char[] rands=generateCheckCode();
drawRands(g,rands);
ByteArrayOutputStreambos=new ByteArrayOutputStream();
ImageIO.write(bi,"JPEG", bos);
byte[]buf=bos.toByteArray();//将bi对象里面的内容转换成了一个字节数组
out.write(buf);
response.setContentLength(buf.length);
session.setAttribute("checkCode",newString(rands));
out.flush();
out.close();
}
privatevoid drawRands(Graphics g,char[] rands){
g.setColor(Color.black);
g.setFont(newFont(null,Font.ITALIC|Font.BOLD,18));
g.drawString(""+rands[0],1, 17);
g.drawString(""+rands[1],16, 18);
g.drawString(""+rands[2],32, 16);
g.drawString(""+rands[3],46, 17);
System.out.println(newString(rands));
}
privatechar[] generateCheckCode(){
Stringchars="0123456789abcdefghijklmnopqrstuvwxyz";
charrands[]=new char[4];
for(inti=0;i<4;i++){
intrandom=(int)(Math.random()*36);
rands[i]=chars.charAt(random);
}
returnrands;
}
privatevoid drawBackground(Graphics g){
g.setColor(newColor(0xDCDC));
g.fillRect(0,0, WIDTH, HEIGHT);
for(inti=0;i<120;i++){
intx=(int)(Math.random()*WIDTH);
inty=(int)(Math.random()*HEIGHT);
intred=(int)(Math.random()*255);
intgreen=(int)(Math.random()*255);
intblue=(int)(Math.random()*255);
g.setColor(newColor(red,green,blue));
g.drawOval(x,y, 1, 0);
}
}
publicvoid doPost(HttpServletRequest request, HttpServletResponse response)
throwsServletException, IOException {
doGet(request,response);
}
publicvoid init() throws ServletException {
//Put your code here
}
}
- url重写实现session跟踪和一次性验证码的实现
- url重写实现session跟踪和一次性验证码的实现
- 利用Cookie或URL实现Session跟踪-----利用Session实现一次性验证码
- URL重写实现session跟踪
- Session实现一次性验证码
- 使用url重写实现Session跟踪
- servlet url 重写实现session跟踪
- 一个利用Session实现一次性验证码
- 利用session实现一次性验证码
- 使用session实现一次性验证码
- 使用session实现一次性验证码
- 使用session实现一次性验证码
- 使用session实现一次性验证码
- 利用Session实现一次性验证码
- Session实现一次性验证码(十)
- session的典型案例三:实现一次性验证码
- 传智播客Java web学习,url重写实现Session跟踪以及Session的持久化
- javaweb之Session实现简单的购物(URL重写。Cookie重写指定有效日期)和简单的验证结论
- ST、SC、FC、LC光纤接头区别
- Oracle使用sql语句分页显示数据,C#版
- 三个哲理故事教会我(我想所有人都有必要看)如何降低技术创业的风险
- 关于C语言printf和scanf中的星号占位符
- 条带化(Striping)
- url重写实现session跟踪和一次性验证码的实现
- OpenCV SURF例子注解
- IP数据包的校验和算法
- linux c/c++ a.out的由来
- Linux内存管理之高端内存映射(转贴)
- FckEditor的几个小技巧
- Visual Studio 2008常用小技巧
- 看我们的WIFI-Robot无线远程遥控智能机器人
- oracle数据库实现行转列和列转行的Sql语句