1. 程式人生 > >使用者免登入功能

使用者免登入功能

思路:使用者免登陸的是指使用者登入時,輸入使用者名稱、密碼等等,再勾"記住密碼"選項,’成功登入過一次系統,而使用者的使用者名稱以及密碼等等都儲存在cookie中,當用戶再次登入時,系統會自動呼叫Cookie中的資料,自動給使用者賦值,從而實現免登陸。下面是實現本次功能的程式碼:

login.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String uname="";
  String psw="";
if(request.getCookies()!=null){
//得到cookie資料
Cookie[] cs=request.getCookies();
for(Cookie c:cs){
//從cookie中獲取使用者名稱
if(c.getName().equals("uname")){
uname=c.getValue();
}
//從cookie中獲取密碼
if(c.getName().equals("psw")){
psw=c.getValue();
}
}
}
  %>
<form action="loginCheck.jsp" method="get">
 使用者名稱:<input type="text" name="name" value="<%=uname %>"/><br/>
 密    碼:<input type="password" name="psw" value="<%=psw %>"/><br/>
 <input type="checkbox" name="auto" value="is">是否記住密碼<br/>
 <input type="submit" value="登入"/>
 </form>


</body>
</html>

loginCheck.jsp:

<%@page import="com.dao.UserDao"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"; pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String uname=request.getParameter("name");
String psw=request.getParameter("psw");
UserDao ud = new UserDao();
boolean a = ud.LoginCheck(uname, psw);
if(a){
out.print("登陸成功");
if(request.getParameter("auto")!=null&&request.getParameter("auto").equals("is")){
//在客戶端儲存使用者名稱和密碼
Cookie c =new Cookie("uname",uname);
c.setMaxAge(60*60*24);//設定cookie資料有效時長
response.addCookie(c);//向客戶端寫資料
out.print(c.getValue());
Cookie c1 =new Cookie("psw",psw);
c1.setMaxAge(60*60*24);//設定cookie資料有效時長
response.addCookie(c1);//向客戶端寫資料
}
}else{
out.print("登陸失敗");
}
%>


</body>
</html>

寫個DbOperation工具包:

package com.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DbOperation {
protected Connection conn;//連線
protected PreparedStatement psmt;//預編譯
protected ResultSet rs;//結果集
private final String URL="jdbc:mysql://127.0.0.1:3306/ff";
private final String UNAME="root";
private final String PSW="root";

//連線資料庫
public void getConn(){
//載入驅動
try {
Class.forName("com.mysql.jdbc.Driver");
//獲得連結
conn=DriverManager.getConnection(URL,UNAME, PSW);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


//關閉連線
public void closeAll(){
try {
if(conn!=null){
conn.close();
}
if(psmt!=null){
psmt.close();
}
if(rs!=null){
rs.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

//查詢操作
public void extQuery(String sql,Object...obj){
try {
psmt =conn.prepareStatement(sql);//查詢sql語句
for(int i=0;i<obj.length;i++){
psmt.setObject((i+1), obj[i]);
}
rs=psmt.executeQuery();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

//更新操作
public void extUpdate(String sql, Object...obj){
try {
psmt = conn.prepareStatement(sql);
for(int i=0; i<obj.length;i++){
psmt.setObject((i+1), obj[i]);
}
psmt.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

UserDao:

package com.dao;


import java.sql.SQLException;


import com.bean.Auser;
import com.util.DbOperation;


public class UserDao extends DbOperation{
public boolean LoginCheck(String uname,String psw){
Auser a = new Auser();
boolean flag = true;

//獲取連結
getConn();

//執行sql語句
String sql = "select * from auser where name = ? and psw = ?";

extQuery(sql, uname,psw);
try {
if (rs.next()) {
a.setName(uname);
a.setPsw(psw);
flag = true;
}else{
flag = false;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return flag;
}
}