1. 程式人生 > >JavaWeb學習——Cookie與JSP

JavaWeb學習——Cookie與JSP

tco ram als -a 學習 常用 char ons exp

一、Cookie簡介

Cookie 指某些網站為了辨別用戶身份、進行 session 跟蹤而儲存在用戶本地終端上的數據

Cookie 是由 Web 服務器保存在用戶瀏覽器上的小文本文件,它包含有關用戶的信息。

Cookie總是保存在客戶端中,按在客戶端中的存儲位置,可分為內存Cookie和硬盤Cookie。內存Cookie由瀏覽器維護,保存在內存中,瀏覽器關閉後就消失了,其存在時 間是短暫的。硬盤Cookie保存在硬盤裏,有一個過期時間,除非用戶手工清理或到了過期時間,硬盤Cookie不會被刪除,其存在時間是長期的。所以,按存在時間,可分 為非持久Cookie和持久Cookie。

技術分享圖片

二、Cookie的常用方法

方法 描述
Cookie(String name, String value) 實例化對象,傳入cookie的名稱和值
public String getName() 獲取Cookie對象的名稱
public String getValue() 獲取Cookie對象的值
public void setValue(String value) 設置Cookie的值
public void setMaxAge(int expiry) 設置Cookie的有效期,如果不設置,有效期為一次對話。
public int getMaxAge() 獲取Cookie的有效期
public void setPath(String url) 設置Cookie的有效路徑,即訪問url之外的資源檢測不到這個cookie
public String getPath() 獲取Cookie的有效路徑
public void setDomain(String pattern) 設置Cookie的有效域,多個網站可以使用一個Cookie
public Strinng getDomain() 獲取Cookie的有效域

response接口也中定義了一個addCookie方法,它用於在其響應頭中增加一個相應的Set-Cookie頭字段。 同樣,request接口中也定義了一個getCookies方法,它用於獲取 客戶端提交的Cookie。

三、實例(用戶登錄)

以Cookie來保存用戶登錄的用戶名和密碼:

 1 <!-- login.jsp-->
 2 <html>
 3   <body>
 4   <%
 5       String username="", password="";  //創建兩個存儲username和password的對象
 6       
 7       Cookie[] cookies = request.getCookies();  //獲取客戶端保存的cookie數組
 8       if(cookies!=null&&cookies.length>0){  //檢測cookies是否為空
 9           for(Cookie c: cookies){
10               if(c.getName().equals("username")){
11                   username = URLDecoder.decode(c.getValue(),"utf-8");  //獲取cookies中的中文數據,需要使用URLDecoder類的decode方法進行中文解碼
12               }     
13               if(c.getName().equals("password")){
14                   password = URLDecoder.decode(c.getValue(),"utf-8");
15               }
16           }
17       }
18    %>
19     <h1>用戶登錄</h1>
20     <%@include file="date.jsp"%><%--include指令 --%>
21     <jsp:include page="date.jsp" flush="false" /> <%--include動作 --%>
22     <hr>
23     <form action="doLogin.jsp" name="LoginForm" method="post">
24       <table>
25         <tr>
26           <td>用戶名:</td>
27           <td><input type="text" name="username" value="<%=username %>"></td>
28         </tr>
29         <tr>
30           <td>密碼:</td>
31           <td><input type="password" name="password" value="<%=password %>"></td>
32         </tr>
33         <tr>
34           <td colspan="2"><input type="checkbox" name="isUseCookie" checked="checked">是否保存用戶信息</td>
35         </tr>
36         <tr>
37           <td colspan="2" text-align="center"><input type="submit" value="登錄"></tr>
38         </tr> 
39       </table>
40     </form>
41   </body>
42 </html>
<!-- doLogin.jsp -->
<html>  
  <body>
    <%
        request.setCharacterEncoding("utf-8");
        String[] isUseCookies = request.getParameterValues("isUseCookie");
        //首先判斷用戶是否選擇保存信息
        if(isUseCookies!=null&&isUseCookies.length>0){  
            //使用URLEncoder類中的encoder方法解決中文亂碼問題
            String username = URLEncoder.encode(request.getParameter("username"),"utf-8");
            String password = URLEncoder.encode(request.getParameter("password"),"utf-8");
            
            Cookie usernameCookie = new Cookie("username",username);  //創建Cookie
            Cookie passwordCookie = new Cookie("password",password);
            
            usernameCookie.setMaxAge(86400);  //設置Cookie最大有效期
            passwordCookie.setMaxAge(86400);
           
            response.addCookie(usernameCookie);  //寫入Cookie
            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);  //重新保存
                    }     
                }
            }
        }   
        
     %>
    <h1>登陸成功</h1>
    <hr>
    <a href="users.jsp">點擊查看用戶信息</a>
  </body>
</html>

四、Cookie與Session對比

Cookie Session
存儲位置 在客戶端保存用戶信息 在服務器端保存用戶信息
數據類型 保存類型是String 保存類型是Object
有效期 長期保存在客戶端 隨會話結束而銷毀
信息安全 保存不重要信息 保存重要信息

五、Cookie的缺陷

  • Cookie會被附加在每個HTTP請求中,所以無形中增加了流量。
  • 由於在HTTP請求中的Cookie是明文傳遞的,所以安全性成問題。(除非用HTTPS)
  • Cookie的大小限制在4KB左右。對於復雜的存儲需求來說是不夠用的。

--- 每天積累一點點,吃水不忘挖井人 ---

JavaWeb學習——Cookie與JSP