Cookie和Session之間的關係重新複習一下
阿新 • • 發佈:2019-01-26
Cookie幹嘛的? 會話(cookie,session)技術的一種. 因為http協議是無狀態的,每次都是基於一個請求一個響應.每次請求和響應都跟上次沒有關係. 我們需要記錄之前對話資訊. cookie技術.是屬於客戶端(瀏覽器)儲存資訊的技術. cookie怎麼用? 1.新增cookie到瀏覽器 1>新建一個cookie(鍵值對) Cookie cookie = new Cookie("name", "tom"); 2>將cookie 新增到響應中 response.addCookie(cookie); 2.瀏覽器傳送cookie到伺服器,如何取 1>獲得所有瀏覽器傳送的cookie Cookie[] cookies = request.getCookies(); 2>遍歷並判斷我們要找的cookie if(cookies!=null && cookies.length>0){ for(Cookie c : cookies){ if(c.getName().equals("name")){ System.out.println("獲得的cookie:"+c.getName()+":"+c.getValue()); } } } cookie原理. 讓瀏覽器記住鍵值對.是向響應頭中新增一下頭即可: set-Cookie:name=tom; 瀏覽器記住之後,向伺服器傳送鍵值對,是在請求頭中新增下面的資訊: Cookie: name=tom; cookie細節問題: 1.瀏覽器記多久? 預設是在會話期間有效.(關閉瀏覽器,cookie就被刪除).(有效時間-1) 2.有效時間如何設定? //設定cookie的最大有效時間 1>設定一個正數,標示最大有效時間.單位是秒 //cookie.setMaxAge(60*60); 2>設定為-1 , 就是相當於預設有效時間, 瀏覽器關閉就消失. //cookie.setMaxAge(-1); 3> 標示cookie的有效時間為0.傳送到瀏覽器就消失了. //利用有效時間為0 這件事,我們可以做刪除cookie的操作. // 因為同一個路徑 ,不能存在相同的cookie(鍵相同). // 我們可以通過覆蓋的方式,設定有效時間為0. 刪除cookie cookie.setMaxAge(0); 3.瀏覽器在什麼情況下發送cookie(路徑) cookie的預設路徑就是傳送cookie的servlet所在目錄. /Day09-cookie /Day09-cookie/abc/xxxServlet 訪問路徑如果是cookie路徑的子路徑那麼,瀏覽器就會把該cookie告訴伺服器. 4.cookie中的域 (瞭解) 想要以下三個 主機和主機下的專案能共享一個cookie. www.baidu.com music.baidu.com map.baidu.com 完成兩步即可: 1.設定cookie的域為 ".baidu.com" 2.設定cookie路徑 為: "/" 以上就是跨主機訪問cookie.不常用.
Session 1什麼是session 伺服器端儲存會話資訊的技術. 2.怎麼用 //1 如何獲得session HttpSession session = request.getSession(); //2 如何操作session // session.setAttribute(arg0, arg1) // session.getAttribute(arg0) // session.removeAttribute(arg0) // session.getAttributeNames() 3.原理 瀏覽器第一次訪問伺服器,伺服器會在記憶體中開闢一個空間(session),並把session對應的ID傳送給瀏覽器. 那麼下次瀏覽器再去訪問伺服器,會把sessionID 交給伺服器,伺服器通過sessionID 找到剛才開闢的空間. 以上就是session的原理. 4.session細節問題 1> 伺服器讓瀏覽器記住sessionID的cookie 預設過期時間是 (-1)==> 關閉瀏覽器 cookie就丟失 ==> cookie丟失 sessionID就丟失 ==> 找不到伺服器的session 2> session中除了 4個操作 map的方法之外,還有哪些方法. long getCreationTime() 獲得建立時間 String getId() 獲得sessionID long getLastAccessedTime() 獲得最後一次訪問時間 int getMaxInactiveInterval() 獲得session的壽命 void setMaxInactiveInterval(int interval) 設定session的過期時間 void invalidate() 讓session立即失效 boolean isNew() 3> 關於設定session的最大有效時間 預設是30分鐘. ==> 在tomcat的web.xml中 <session-config> 配置的. 如何修改session的過期時間? 1.修改在tomcat的web.xml中 <session-config> ==> 影響伺服器中的所有專案 2.在專案的web.xml中 加入<session-config> 配置.==> 影響的是當前專案 3.通過setMaxInactiveInterval(int interval)方法設定.==> 當前操作的session 4>(瞭解內容)URL重寫 如果瀏覽器 禁用cookie功能不能儲存任何cookie.那麼session技術要是用 cookie來儲存sessionID. 沒有cookie怎麼儲存? 使用url重寫解決該問題. 將頁面中所有的連線 末尾全都加上 cookieid的引數. 這樣使用者點選連線訪問網站,通過url把SeesionID帶到了伺服器.這樣就解決了. 但是 網際網路行業沒有這麼幹的.