Cookie实现用户登录记住密码,实现自动登录
生活随笔
收集整理的這篇文章主要介紹了
Cookie实现用户登录记住密码,实现自动登录
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
什么是Cookie
在java是一個類,一對鍵和值組成,鍵值都是字符串類型,每個cookie只能保存一對鍵和值.每個cookie只能保存最大4K的數據案列應用
保存用戶名和密碼在瀏覽器端,Cookie的數據事保存在本地瀏覽器的硬盤中,就算計算機關機也會保存,不同瀏覽器的cookie數據是不能共享的.
數據準備
sql
-- 創建用戶表 CREATE TABLE `user`(id INT PRIMARY KEY AUTO_INCREMENT,username VARCHAR(20),PASSWORD VARCHAR(20) );-- 添加一條用戶數據 INSERT INTO USER VALUES (NULL,'xiaofu','123');-- 查詢是否有這個用戶 SELECT * FROM USER WHERE username = 'xiaofu' AND PASSWORD = '123';本次案列模擬三層架構,使用maven工程,數據庫連接沒有使用連接池,用的jdbc,目的是方便演示cookie在本地保存實現賬戶密碼的記錄
目錄結構
pom.xml
dao
public interface UserLogin {//根據用戶名和密碼查詢是否有這個用戶int LoginUser(String username,String password); } package com.fs.dao.impl;import com.fs.dao.UserLogin;import java.sql.*;/* dao實現類,根據用戶輸入的用戶名和密碼進行校驗將結果返回給業務層,讓業務層處理邏輯我這里就用jdbc做案列*/ public class UserLoginImpl implements UserLogin {@Overridepublic int LoginUser(String username, String password) {int login = 0;Connection connection = null;PreparedStatement preparedStatement = null;ResultSet resultSet = null;try {//注冊驅動Class.forName("com.mysql.jdbc.Driver");//獲取連接對象connection = DriverManager.getConnection("jdbc:mysql://192.168.93.132:3306/test", "root", "root");//獲取預編譯語句對象preparedStatement = connection.prepareStatement("SELECT * FROM user WHERE username = ? AND PASSWORD = ?");//對占位符?進行賦值preparedStatement.setString(1,username);preparedStatement.setString(2,password);//執行查詢,得到結果集resultSet = preparedStatement.executeQuery();while (resultSet.next()){//如果結果集有查詢結果,就將login賦值1,后面對返回值進行判斷,是1就說明數據庫中有這個用戶,就判斷登錄成功login = 1;}} catch (Exception throwables) {throwables.printStackTrace();} finally {//關閉資源try {resultSet.close();preparedStatement.close();connection.close();} catch (SQLException throwables) {throwables.printStackTrace();}}return login;} }service
package com.fs.service;import com.fs.dao.impl.UserLoginImpl;/* 業務層*/ public class LoginService {/*** 調用dao登錄查詢是否有這個用戶,有就返回1* @param username 用戶名* @param password 密碼* @return 返回1 就表示有這個用戶*/public int login(String username,String password){//依耐與Dao層UserLoginImpl userLogin = new UserLoginImpl();int i = userLogin.LoginUser(username, password);return i;} }Servlet
package com.fs.servlet;import com.fs.service.LoginService;import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter;@WebServlet("/login") public class ServletLogin extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");PrintWriter out = response.getWriter();//依耐與業務層LoginService loginService = new LoginService();//從表單提交中獲取用戶名和密碼String username = request.getParameter("username");String password = request.getParameter("password");//調用業務層,判斷數據庫是否有這個用戶名密碼int login = loginService.login(username, password);if (login==1){//為1,表示有數據,者登錄成功//在判斷是否勾選了記住密碼String remember = request.getParameter("remember");if (remember!=null) {//我們需要實現cookie自動登錄就得把用戶名和密碼創建成cookie,發送給瀏覽器Cookie usernameCookie = new Cookie("username", username);Cookie passwordCookie = new Cookie("password", password);//設置訪問路徑和過期的時間,發送給瀏覽器usernameCookie.setPath(request.getContextPath() + "index.html");//保存在瀏覽器端1周usernameCookie.setMaxAge(60 * 60 * 24 * 7);//添加cookieresponse.addCookie(usernameCookie);passwordCookie.setPath(request.getContextPath() + "index.html");passwordCookie.setMaxAge(60 * 60 * 24 * 7);response.addCookie(passwordCookie);}//重定向到登錄成頁面response.sendRedirect("success.html");}else {//重定向到失敗頁面response.sendRedirect("failure.html");}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);} }web頁面
index.html
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>用戶登錄</title> <!-- 導入js文件--><script src="js/commons.js"></script> </head> <body> <h2>用戶登錄</h2> <form action="login" method="post" id="loginForm"><table><tr><tb>用戶名:</tb><tb><input type="text" name="username" id="username"/> </tb></tr><tr><tb>密碼:</tb><tb><input type="password" name="password" id="password"/> </tb></tr><tr><td>記住密碼</td> <!-- 沒有value屬性的前提下,點中它的值是on,如果沒有勾上為null--><td><input type="checkbox" name="remember"/> </td></tr><tr><td><input type="submit" value="登錄"></td></tr></table> </form> </body> </html>success.html
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>登錄成功</title> </head> <body> <h2>登錄成功,感謝您使用</h2> </body> </html>failure.html
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>登錄失敗</title> </head> <body> <a href="index.html">登錄失敗,請從新登錄</a> </body> </html>commons.js
/*** 頁面加載完畢后執行*/ window.onload = function () {//從cookie中得到用戶名和密碼let username = getCookie("username");let password = getCookie("password");//如果字符串不為空,才將數據提交給服務器if (username!="" && password!="") {//設置文本框的值document.getElementById("username").value = username;document.getElementById("password").value = password;} }/*** 通過鍵得到cookie中的值*/ function getCookie(name) {//可以得到當前路徑下所有的cookie信息let cookie = document.cookie; //username=xiaofu; password=123if (cookie!="") {//按分號進行拆分成數組,數組中有2個元素let split = cookie.split("; ");for (let i = 0; i < split.length; i++) { //split[0] = "username=admin" split[1] = "password=123"let splitElement = split[i]; //每個元素//再按等于號來拆分let arr = splitElement.split("=");let key = arr[0]; //[0]號元素是username,[1]號元素adminlet value = arr[1];//如果name與key相等,就返回valueif (key == name) {return value;}}}return ""; //沒有找到 }運行效果
在tomcat中部署項目后,來瀏覽器端的登錄頁面
輸入用戶名密碼,登錄失敗后頁面
點擊從新登錄,這次輸入正確的用戶名密碼
首先確定是否有cookie信息
點擊登錄
登錄后發現cookie是已經記錄在瀏覽器端了,后續打開網頁會自動填充到文本框,因為在commons.js中設置了保存
登錄成功頁面
登錄后重新回到登錄頁面查看cookie,并發現文本框自動填充
實現自動登錄
只需要在index.html中的from標簽中添加一個id,commons.js中添加一個方法即可
//實現自動登錄只需要在<form action="login" method="post" id="loginForm">標簽中添加id,然后在下面執行submit方法document.getElementById("loginForm").submit();總結
以上是生活随笔為你收集整理的Cookie实现用户登录记住密码,实现自动登录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JDBC连接池C3P0,druid
- 下一篇: MyBatis入门HelloWorld,