JavaWeb學習——Cookie與JSP
阿新 • • 發佈:2018-08-07
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