(1)什麼是cookiehtml
a、cookie是一種客戶端的狀態管理技術b、當瀏覽器向服務器發送請求的時候,服務器會將少許的數據以set-cookie消息頭的方式發送給瀏覽器,當瀏覽器再次訪問服務器時,會將這些數據以cookie消息頭的方式發送給服務器。java
(2)如何建立一個cookieweb
Cookie c = new Cookie(String name,String value);response.addCookie(c);默認狀況下,cookie保存在瀏覽器內存中數據庫
(3)cookie的查詢瀏覽器
Cookie[] cookie = request.getCookies();安全
注意:該方法有可能返回nullString cookie.getName():查找cookie的名字String cookie.getValue():查找cookie的值服務器
(4)cookie的生存時間cookie
cookie.setMaxAge(int seconds):cookie的保存時間seconds>0:瀏覽器會將cookie保存在硬盤上,超過指定時間會刪除該cookieseconds<0:缺省值,只將cookie保存在內存中,只要瀏覽器不關閉,cookie就一致保存,瀏覽器一旦關閉,cookie就會被清空。seconds=0:當即刪除cookie,如要刪除一個叫userID的cookie,那麼能夠這麼作:Cookiec = new Cookie("userID","");c.setMaxAge(0);response.addCookie(c);app
(5)cookie的編碼問題this
cookie只能保存ascii字符,對於不合法的字符(如中文)須要轉換成ascii碼
例:Cookie cookie3 = new Cookie("realname",URLEncoder.encode("姓名","utf-8"));
(6)cookie的路徑問題
a、什麼是cookie的路徑問題?瀏覽器在向服務器發送請求時,會比較cookie的路徑要與訪問的服務器的路徑是否匹配,只有匹配的cookie纔會發送給服務器。b、cookie的默認路徑默認路徑等於建立該cookie的組件路徑c、匹配規則瀏覽器要訪問的路徑必須是cookie的路徑或者其子路徑時,纔會發送對應的cookied、設置cookie的路徑cookie.setPath(String path)如:cookie.setPath("/appname");這樣保證這個cookie能夠被整個web應用訪問。
(7)cookie域
setDomain:設置cookie域,指的是訪問某個域的時候,纔會帶入cookie,訪問其餘域,不會帶入cookie。默認會禁止該設置,由於安全性較差,如,訪問baidu.com,baidu.com寫一個域是google.com的cookie,那麼訪問google.com的時候會帶入baidu.com的cookie,從而會實現攻擊的效果。
(8)cookie的限制
a、cookie能夠被用戶禁止b、cookie不徹底,敏感數據,好比密碼、帳號等須要加密。c、cookie的大小有限制,大約爲4K左右d、cookie的個數也有限制,大約是300個左右e、每一個站點最多保存20個cookief、cookie只可以保存字符串。
建立cookie時的代碼:(在第一次登錄時的用戶檢測的servlet上)
protected void service(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{ resp.setContentType("text/html;charset=utf-8"); String uname=req.getParameter("username"); String password=req.getParameter("password"); Check ck=new Check(); User u=null; try { u=ck.check(uname, password); } catch (SQLException e) { // TODO 自動生成的 catch 塊 e.printStackTrace(); } if(u==null) { req.getRequestDispatcher("Login").forward(req, resp); //System.out.println("this is a test"); //resp.getWriter().write("用戶名或密碼錯誤"); }else { Cookie c=new Cookie("uname",u.getUname()); c.setMaxAge(3*24*3600); resp.addCookie(c); resp.sendRedirect("Main"); } } }
cookie檢測代碼:
protected void service(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{ Cookie[] cks=req.getCookies(); String ckv=null; User Uck=new User(); Check ck=new Check(); if(cks!=null) { for(Cookie c:cks) { if("uname".equals(c.getName())) { ckv=c.getValue(); System.out.println(ckv); } } try { Uck=ck.check(ckv); } catch (SQLException e) { // TODO 自動生成的 catch 塊 e.printStackTrace(); } if(ckv==null){//檢查ckv是不是空,排除只有鍵,沒有值得狀況。 resp.sendRedirect("Login"); } if(Uck==null) {//檢查Uck是否爲空,排除在cookie有效期內,數據在數據庫中被刪除的況 resp.sendRedirect("Login"); }else { resp.sendRedirect("Main"); } }else { req.getRequestDispatcher("Login").forward(req, resp); } } }
第一次登陸時:
第二次登錄時:
源代碼:
連接:https://pan.baidu.com/s/1SADXDyNFq-ICc4NXFEMJNw 提取碼:95th 複製這段內容後打開百度網盤手機App,操做更方便哦