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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章