session的工作原理和验证码实现方法实例



session的工作原理和验证码实现方法实例,session的工作原理和验证码

session的工作原理和验证码

session的工作原理和验证码

session的工作原理和验证码

session的工作原理和验证码


还可以在在方法里直接设置session的生命周期
httpsession.setMaxInactiveInterval(60);单位为秒。

2.验证码:
createcode代码如下:

package com.ru.dao;
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;
public class CreateCode extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 7.禁止浏览器缓存随机图片
        response.setDateHeader(“Expires”, -1);
        response.setHeader(“Cache-Control”, “no-cache”);
        response.setHeader(“Pragma”, “no-cache”);
        // 6.通知客户机以图片方式打开发送过去的数据
        response.setHeader(“Content-Type”, “image/jpeg”);
        // 1.在内存中创建一副图片
        BufferedImage image = new BufferedImage(60, 30,
                BufferedImage.TYPE_INT_RGB);
        // 2.向图片上写数据
        Graphics g = image.getGraphics();
        // 设背景色
        g.setColor(Color.BLACK);
        g.fillRect(0, 0, 60, 30);
        // 3.设置写入数据的颜色和字体
        g.setColor(Color.RED);
        g.setFont(new Font(null, Font.BOLD, 20));
        // 4.向图片上写数据
        String num = makeNum();
        //这句话就是把随机生成的数值,保存到session
        request.getSession().setAttribute(“checkcode”, num); //通过session就可以直接去到随即生成的验证码了
        g.drawString(num, 0, 20);
        // 5.把写好数据的图片输出给浏览器
        ImageIO.write(image, “jpg”, response.getOutputStream());
    }
    //该函数时随机生成7位数字
    public String makeNum() {
        Random r = new Random();
        //9999999 可以生成7位
        String num = r.nextInt(9999) + “”; 
        StringBuffer sb = new StringBuffer();
        //如果不够4位,前面补零
        for (int i = 0; i < 4 – num.length(); i++) {
            sb.append(“0″);
        }
        num = sb.toString() + num;
        return num;
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
}

。。。。。。。。。。。。。。。。。。。。。。。
out.println(“验证码 :<input type=’input’ name=’vcode’><img src=’/verificationcode/CreateCode’>”);验证码的使用。
验证:

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType(“text/html;charset=utf-8″);
PrintWriter out = response.getWriter();
request.setCharacterEncoding(“utf-8″);
String userid=request.getParameter(“userid”);
String password=request.getParameter(“password”);
String vcode=request.getParameter(“vcode”);
//获取session
HttpSession session=request.getSession();
String vcodenum=(String)session.getAttribute(“checkcode”);
if (session!=null&&vcode.equals(vcodenum)) {
request.getRequestDispatcher(“/logsuccess”).forward(request, response);
} else{
request.setAttribute(“errinf”, “vcodeerror”);
request.getRequestDispatcher(“/login”).forward(request, response);
System.out.println(“错误”);
}
}

3.如果在ie中访问一个web,创建了一个session,我们想在关闭ie后再打开ie浏览器时得到这个session,
那么需要将ie中创建的session的JSESSIONID存储到cookie中去

session的工作原理和验证码

需要注意的是。当创建一个session服务器就会将这个session的  JSESSIONID 传到cookie中。但是由于这个cookie没有设置时间。所以当关闭浏览器,cookie就会消失。
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType(“text/html;charset=utf-8″);
PrintWriter out = response.getWriter();
//获取session
HttpSession httpsession=request.getSession();
//给session赋值
Users user=new Users();
user.setUsername(“如”);
user.setPassword(“123456″);
httpsession.setAttribute(“userinf”,user);
//将Jsessionid放到cookie中,这样关闭浏览器,在打开也可以直接访问创建好的session,用其他浏览器无法访问这个cookie
Cookie cookie=new Cookie(“JSESSIONID”,httpsession.getId());
cookie.setMaxAge(30*60);
response.addCookie(cookie);
//session的生命周期默认是30分钟
//httpsession.setMaxInactiveInterval(60);
out.println(“session ‘username’ 已经创建<a href=’/MySession1/session2′>跳转到session2</a>”);
}

4.加入禁用了cookie,那么浏览器无法从cookie中得到jsessionid,就无法得到原来的session,我们可以认为的在url中传递jsessionid。(因为jsessionid存在为cookie中。但是禁用cookie后,无法保存 jsessionid 的cookie,所以当浏览器再发送请求时无法得到  jsessionid ,也就无法得到原来的session)

//保证可以得到jsessionid,要先调用session

request.getSession();
//url地址重写
String url=response.encodeURL(“/shopingcart/BuyBook?bookid=”+books.getBookid());
for (Books books : al) {
out.print(“<strong>”+books.getBookname()+”</strong><a href=’“+url+”‘> 点击购买</a><br/>”);
}
session的工作原理和验证码