既然學習了javaweb,我就確定避免不了要去接觸cookie和seesion下面簡單的描述一下二者:css
cookie:html
在網站登陸的時候,會有一個再次網站下記住密碼的選項,若是你選上了,下次登陸的時候就不用再從新輸入帳號密碼,java
這就cookie實現的一個小功能。web
客戶端經過瀏覽器向服務器發出請求(記住帳號密碼)服務器響應客戶端給客戶端發送一個大約4kb左右的文檔存放在客後端
戶端瀏覽器當中,這個文檔就屬於一個cookie,當用戶再一次打開瀏覽器登陸時,這時就須要你從新輸入帳號密碼瀏覽器瀏覽器
直接從cookie中取值。安全
cooki的生命週期默認狀況下:從客戶端開啓瀏覽器到關閉瀏覽器 (能夠設置cookie的有效期,從而實現永久有效);bash
建立 cookie : Cookie c = new Cookie("name", "value");
服務器
設置有效期: c.setMaxAge(24 * 60 * 60); //以秒爲單位 這個是一天的時長
cookie
設置有效路徑: c.setPath("127.0.0.1");
保存cookie: response.addCookie(c); //使用response將cookie保存在客戶端瀏覽器裏
刪除cookie: Cookie cookie = new Cookie(WebConst.USER_IN_COOKIE, "");
cookie.setMaxAge(0);
response.addCookie(cookie);//將cookie有效求設置爲零
有一段實例代碼可供參考:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Cookie[] cookies = request.getCookies(); if(cookies == null) { Cookie cookie = new Cookie("admin", "123456"); cookie.setMaxAge(7*24*3600); response.addCookie(cookie); System.out.println("cookie爲空,跳轉登陸頁面"); response.sendRedirect("Login.jsp"); }else { String name = request.getParameter("name"); String pwd = request.getParameter("pwd"); for (Cookie cookie1 : cookies) { System.out.println("用戶名:"+cookie1.getName()+"密碼:"+cookie1.getValue()); if (name.equals(cookie1.getName()) && pwd.equals(cookie1.getValue())) { System.out.println("cookie不爲空,跳轉成功頁面"); request.getRequestDispatcher("s.jsp").forward(request, response); }else { request.getRequestDispatcher("NewFile.jsp").forward(request, response); } } } }
seesion:
seesion與cookie不一樣,seesion是創建在服務器的一個會話,這裏講通俗一點,seesion就至關於一個會議室,
當客戶端和服務器要進行交流的時候,服務器就會分配一個小房間給他們兩個進行交流,這個小房間當服務器或者客
戶端任何一方退出的時候(即服務器關閉或者客戶端關閉),這個小房間就會被服務器收回。這就是一個seesion會話
因爲seesion是在服務端裏面的一種存在,咱們是不可見的因此seesion比cookie更加安全:
seesion常見的幾種方法:
一、public void setAttribute(String name,String value)設定指定名字的屬性的值,並將它添加到session會話範圍內,若是這個屬性是會話範圍內存在,則更改該屬性的值。 二、public Object getAttribute(String name)在會話範圍內獲取指定名字的屬性的值,返回值類型爲object,若是該屬性不存在,則返回null。 三、public void removeAttribute(String name),刪除指定名字的session屬性,若該屬性不存在,則出現異常。 四、public void invalidate(),使session失效。能夠當即使當前會話失效,原來會話中存儲的全部對象都不能再被訪問。 五、public String getId( ),獲取當前的會話ID。每一個會話在服務器端都存在一個惟一的標示sessionID,session對象發送到瀏覽器的惟一數據就是sessionID,它通常存儲在cookie中。 六、public void setMaxInactiveInterval(int interval) 設置會話的最大持續時間,單位是秒,負數代表會話永不失效。 七、public int getMaxInActiveInterval(),獲取會話的最大持續時間,使用時候須要一些處理
不要混淆 session 和 session 實現。
下面一段話來自知乎
原本 session 是一個抽象概念,開發者爲了實現中斷和繼續等操做,將 user agent 和 server 之間一對一的交互,抽象爲「會話」,進而衍生
出「會話狀態」,也就是 session 的概念。而 cookie 是一個實際存在的東西,http 協議中定義在 header 中的字段。能夠認爲是 session
的一種後端無狀態實現。而咱們今天常說的 「session」,是爲了繞開 cookie 的各類限制,一般藉助 cookie 自己和後端存儲實現的,一種更高
級的會話狀態實現。因此 cookie 和 session,你能夠認爲是同一層次的概念,也能夠認爲是不一樣層次的概念。具體到實現,session 由於
session id 的存在,一般要藉助 cookie 實現,但這並不是必要,只能說是通用性較好的一種實現方案。
做者:欲三更 連接:https://www.zhihu.com/question/19786827/answer/84540780
上次寫上面的cookie代碼的時候,要驗證輸入框的的值是否和存的cookie相同時 我發現瀏覽器會同時會保存兩個cookie
後來百度才瞭解到有一個cookie是seesion_id做爲cookie保存在瀏覽器裏,當結束此次seesion會話是第一個cookie也會隨
着摧毀。
參考連接:https://www.jianshu.com/p/efee53ccd12e
http://www.javashuo.com/article/p-eeltcjba-cx.html
注:我的學習QAQ ,若有錯誤,還請指點,謝謝qwq