日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Cookie实现用户登录记住密码,实现自动登录

發布時間:2024/4/15 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.fs</groupId> <artifactId>cookie_testLogin</artifactId> <version>1.0-SNAPSHOT</version><packaging>war</packaging> <!-- mysql--><dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency> <!-- Servlet--><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version></dependency> <!-- junit--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>compile</scope></dependency> <!-- tomcat--><dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-core</artifactId><version>7.0.47</version></dependency></dependencies> </project>

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实现用户登录记住密码,实现自动登录的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。