Cookie记录最后一次访问时间+Session一次性验证码

代码仓库:https://gitee.com/DerekAndroid/CookieSession.git

案例一:记录最后一次访问时间
    若用户是第一次登录该网站
        提示:欢迎访问
    若用户不是第一次登录该网站
        提示:您上次访问的时间为:xxxxxxxx

    步骤分析:
        1.获取所有的cookie数组
        2.从数组中查找含有最后一次访问时间的cookie
        3.若没有查到对应的cookie  那么说明是第一次访问该网站   提示:欢迎访问
        4.若查到对应的cookie    说明 不是第一次访问该网站  获取当前cookie的value值   提示:您最后一次访问时间为value
        5.获取当前的时间
        6.把当前的事件放到cookie中

验证码生成+session保存:

 

package com.itheima.servlet;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
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 CodeServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		// 使用java图形界面技术绘制一张图片

		int charNum = 4;
		int width = 20 * 4;
		int height = 28;

		// 1. 创建一张内存图片
		BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

		// 2.获得绘图对象
		Graphics graphics = bufferedImage.getGraphics();

		// 3、绘制背景颜色
		graphics.setColor(Color.YELLOW);
		graphics.fillRect(0, 0, width, height);

		// 4、绘制图片边框
		graphics.setColor(Color.GRAY);
		graphics.drawRect(0, 0, width - 1, height - 1);

		// 5、输出验证码内容
		graphics.setColor(Color.RED);
		graphics.setFont(new Font("宋体", Font.BOLD, 22));
		
		// 随机输出4个字符
		String s = "ABCDEFGHGKLMNPQRSTUVWXYZ23456789";
		Random random = new Random();
		
		// session中要用到
		String msg = "";
		
		int x = 5;
		for (int i = 0; i < charNum; i++) {
			int index = random.nextInt(32);
			String content = String.valueOf(s.charAt(index));
			
			msg += content;
			graphics.setColor(new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255)));
			graphics.drawString(content, x, 22);
			x += 20;
		}
		
		request.getSession().setAttribute("sessionYzm", msg);

		// 6、绘制干扰线
		graphics.setColor(Color.GRAY);
		for (int i = 0; i < 5; i++) {
			int x1 = random.nextInt(width);
			int x2 = random.nextInt(width);

			int y1 = random.nextInt(height);
			int y2 = random.nextInt(height);
			graphics.drawLine(x1, y1, x2, y2);
		}

		// 释放资源
		graphics.dispose();

		// 图片输出 ImageIO
		ImageIO.write(bufferedImage, "jpg", response.getOutputStream());

	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

	}

}

 登录校验验证码

package com.itheima.c_case;

import java.io.IOException;
import java.text.DateFormat;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LastTimeServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//处理响应乱码
		response.setContentType("text/html;charset=utf-8");
		//获取所有的cookie数组
		Cookie[] cookies = request.getCookies();
		//从cookie数组中查找含有lastTime的cookie
		Cookie co = null;
		if(cookies!=null){
			//查找cookie
			for(Cookie cookie:cookies){
				//哪个cookie含有lastTime
				if("lastTime".equals(cookie.getName())){
					co=cookie;
				}
			}
		}
		//判断是否存在cookie
		if(co!=null){
			response.getWriter().print("您上次的访问时间为:"+co.getValue());
		}else{
			response.getWriter().print("欢迎访问");
		}
		//获取当前的时间
		DateFormat df = DateFormat.getDateTimeInstance();
		String format = df.format(new Date());
		//把当前时间放入cookie中
		Cookie cookie = new Cookie("lastTime", format);
		//设置cookie的存活时间
		cookie.setMaxAge(3600);
		//写回到浏览器
		response.addCookie(cookie);
		
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}

案例二:一次性验证码
    需求:
        把验证码添加到登录案例中
            并且对验证码的输入进行校验
                若验证码没有输入或者输入的为空格   提示:请输入验证码
                若验证码输入了  但是输入的不正确   提示:请输入正确的验证码
 

    步骤:
        1.复制day1102项目
        2.修改web  action
        3.//把msg放入session域对象中
        4.servlet的操作
            //获取前台录入的验证码
            //若用户没有输入或者输入的为空格  提示:请输入验证码
            //若用户输入值,但是值不正确   
                //判断前台录入的值和session中的验证码是否一致
package com.itheima.servlet;

import java.io.IOException;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.itheima.bean.User;
import com.itheima.service.LoginService;

public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setHeader("content-type", "text/html;charset=utf-8");
		//获取请求的用户名和密码
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		System.out.println("username="+username);
		//获取前台录入的验证码
		String yzm = request.getParameter("yzm");
		System.out.println("yzm="+yzm);
		//从session中获取图片中的验证码
		String sessionYzm=(String)request.getSession().getAttribute("sessionYzm");
		System.out.println("sessionYzm="+sessionYzm);
		//清空session   保证点击登录的时候  验证码是最新的
		request.getSession().removeAttribute("sessionYzm");
		//创建LoginService
		LoginService ls = new LoginService();
		try {
			//校验验证码
			if(yzm==""||yzm.trim().length()==0){
				//把错误信息放入request域中
				request.setAttribute("msg", "请输入验证码");
				//请求转发
				request.getRequestDispatcher("/login.jsp").forward(request, response);
				//直接返回,后续的不执行,不然会报错: Cannot forward after response has been committed
				return;
			}else{
				//如果两个验证不一样  需要给出提示
				if(!yzm.equalsIgnoreCase(sessionYzm)){
					System.out.println("请输入正确的验证码");
					//把错误信息放入request域中
					request.setAttribute("msg", "请输入正确的验证码");
					//请求转发
					request.getRequestDispatcher("/login.jsp").forward(request, response);
					return;
				}
			}
			//调用service中的方法
			User user=ls.getUserByUsernameAndPwd(username,password);
			//根据返回的对象,判断提示信息的内容
			System.out.println(request.getContextPath());
			if(user==null){
				//response.getWriter().println("登录失败");
				//把错误信息放入request域对象中
				request.setAttribute("msg", "登录失败");
				//使用请求转发跳转到login.jsp
				request.getRequestDispatcher("/login.jsp").forward(request, response);
				return;
				//不能使用重定向,因为使用重定向后request失效
				//response.sendRedirect("/day1102/login.jsp");
			}else{
				request.getSession().setAttribute("username", user.getUsername());
				response.getWriter().println(user.getUsername()+":欢迎回来");

				request.getRequestDispatcher("/1.jsp").forward(request, response);
				System.out.println("/1.jsp");
				return;
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

             
 

发布了178 篇原创文章 · 获赞 44 · 访问量 24万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章