1. 程式人生 > >使用Cookie儲存使用者登入狀態

使用Cookie儲存使用者登入狀態

1.login.jsp:實現登入介面,使用者可以設定Cooike生存期

<%@ page language="java" import="java.util.*,java.net.*" contentType="text/html; charset=UTF-8" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'login.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
  <%
   			request.setCharacterEncoding("UTF-8");
           Cookie[] cookies = request.getCookies();
           String username ="";
           String password ="";
           
           if(cookies!=null&&cookies.length>0){
                 for(Cookie c : cookies){
           		        if(c.getName().equals("username")){
           		                username=URLDecoder.decode(c.getValue(), "UTF-8");
           		          }	
           		         if(c.getName().equals("password")){
           		                password=URLDecoder.decode(c.getValue(), "UTF-8");
           		         }	
                 }
           }
    %>
  <h1>使用者登入</h1>
  <hr>
  <form  name="LoginForm"	action="doLogin.jsp"	  method="post">
  		<table>
  			<tr>
  				<td>使用者名稱:</td>
  				<td><input	type="text" 	name="username" 	value="<%=username %>"></td>
  			</tr>
  			<tr>
  				<td>密碼:</td>
  				<td><input	type="password"	name="password"		value="<%=password%>"></td>
  			</tr>
  			<tr>
  				<td	colspan="2"	align="center"><input		type="checkbox"	name="isUseCookie"		checked="checked">十天內記住我的登入狀態</td>
  			</tr>
  			<tr>
  				<td	colspan="2"	align="center"><input		type="submit"	value="登入"><input	type="reset"	value="取消"></td>
  			</tr>
  		</table>
  </form>
 
  </body>
</html>

2.dologin.jsp:通過request物件獲取使用者名稱和密碼並將其儲存在Cookie中

<%@ page language="java" import="java.util.*,java.net.*" contentType="text/html; charset=UTF-8" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'dologin.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
    登入成功<br>
    <%
                  request.setCharacterEncoding("utf-8");
                  //首先判斷使用者是否選擇了記住登入狀態
                  String[]  isUseCookies = request.getParameterValues("isUseCookie");
                 
                  if(isUseCookies!=null&&isUseCookies.length>0){
                  		String  username =URLEncoder.encode(request.getParameter("username"), "utf-8") ;
                        String  password =URLEncoder.encode(request.getParameter("password"), "utf-8") ;//使用URLEncoder解決無法在Cookie當中儲存中文字串問題
                  		Cookie usernameCookie = new Cookie("username",username);//把使用者名稱和密碼都儲存在Cookie裡面
                  		Cookie passwordCookie = new Cookie("password",password);
                  		usernameCookie.setMaxAge(864000);//設定最大生存期限為10天
                  		passwordCookie.setMaxAge(864000);
                  		response.addCookie(usernameCookie);//將Cookie儲存在response物件中
                  		response.addCookie(passwordCookie);
                  }
                  else{
                  		Cookie[]	cookies = request.getCookies();
                  		if(cookies!=null&&cookies.length>0){
                  		      for(Cookie c : cookies){
                  		             if(c.getName().equals("username")||c.getName().equals("password")){
                  		                   c.setMaxAge(0);//設定Cookie失效
                  		                   response.addCookie(c);//重新儲存
                  		             }
                              }
                        }
                  }
                  
     %>
    
   
     <br> 
     <a href="users.jsp">檢視使用者資訊</a>
  </body>
</html>

3.user.jsp:讀取Cooike中的使用者名稱和密碼並顯示出來

<%@page import="java.net.URLDecoder"%>
<%@ page language="java" import="java.util.*,java.net.*" contentType="text/html; charset=UTF-8" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'users.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
    <h1>使用者資訊</h1>
    <%
           request.setCharacterEncoding("UTF-8");
           Cookie[] cookies = request.getCookies();
           String username ="";
           String password ="";
           
           if(cookies!=null&&cookies.length>0){
                 for(Cookie c : cookies){
           		         if(c.getName().equals("username")){
           		                username=URLDecoder.decode(c.getValue(), "UTF-8");
           		          }	
           		         if(c.getName().equals("password")){
           		                password=URLDecoder.decode(c.getValue(), "UTF-8");
           		         }	
                 }
           }
     %>
     
     使用者名稱:<%=username %>  <br>
     密   碼:<%=password %>  
  </body>
</html>