Cookie的使用(14)

一:cookie的簡要介紹:

(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實現三天免登錄:

建立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,操做更方便哦

相關文章
相關標籤/搜索