1、會話html
1. 一次對話,可能說了不少句:瀏覽器
2. Web開發中的會話:緩存
l 打開瀏覽器,點擊了多個鏈接(發出了屢次的請求)tomcat
l 會話共享屢次請求的數據服務器
1. Cookie客戶端應用:記住登陸用戶名cookie
2. Response:把cookie存在客戶端 response.addCookie(cookie);session
3. Request:獲取客戶端的cookie Cookie[] csokies = request.getCookies();dom
4. 響應頭:Cookie-setide
5. 請求頭:Cookiepost
6. 經常使用方法
l setName: cookie 的名稱
l setValue: cookie的值
l setVersion:版本
l setComment:註釋
l setMaxAge: cookic能保存多久保存永久:max_value integer的靜態屬性int的最大數值
l setDomain:域名 取當前的域名通常不須要設置 path默認取當前項目,通常不須要設置
l setPath: 路徑 當servlet的路徑能夠statrtWith() cookie的路徑時 能夠看到cookie
7. 注意:
l 定位惟一一個cookie Doma + path + name 主機名+路徑+CookieName
l Cooke沒法刪除能夠經過Key 的 設置時間爲0 那麼將會覆蓋 cookie就爲空
l cookie的範圍必須大於servlet的路徑 才能夠看到
l cookie不能存中文,不能存對象
l 存在客戶端,就是一個文件,用於存儲數據存response 取 request
l 一個網站最多20個,總共300個,每一個不能超過4k
l 讓一個cookie被整個網站看到 設置路徑爲當前項目 request.getContextPath();項目路徑
1. Session服務器:記住用戶狀態
2. 域對象:servletContext request
3. 當作一個Map
4. 共享數據,存在服務器的內存中,被一次會話共享
5. 獲取:request.getSession() 第一次getSession() 建立對象
6. HttpSession session = request.getSession();可帶參數
7. 若是參數爲true,沒有就建立,有就不建立()默認爲true();
8. 若是參數爲false,有就返回,沒有就返回null
9. 經常使用方法:
l object getAttribute(key) 根據Key獲取value
l void setAttribute(key,value)設置key 和value
l void removeAttribute(key) 經過Key刪除session中的值
l void invalidate() 銷燬Session
1. 連續點擊:
2. 返回頁面緩存繼續提交:
l 整一個隨機數 UUID static randomUUID(); 標識同步的原理
l 第一次提交時session 和表單中有一個一樣的標識
l 第一次提交成功後把session的標識清空
l 第二次重複提交時對session作重複判斷
l 提交後讓按鈕失效
1. 服務器重啓
2. 長時間不響應:鈍化 存到磁盤中 session中的對象存在tomcat/work目錄下
<session-config> //配置鈍化時間
<session-timeout> </session-timeout> //單位是分鐘
</session-config>
默認是30分鐘
3. 建立一個新的session,更改jsessionID
1. 禁止cookie,session不能用,session的頭是cookie
2. 若是瀏覽器禁止了cookie,能夠手動帶上jsessionID。可是比較麻煩
3. 對URL進行處理,能夠自動在cookie禁止的狀況下建立jsession
//獲取當前時間 String now = new Date().
//建立一個Cookie Cookie cookie = new Cookie("lastAccessTime",now); //設置cookie的生命週期 cookie.setMaxAge(Integer.MAX_VALUE); //設置cookie的主機名 //cookie.setDomain(); //通常不須要 //cookie.setPath(request.getContextPath() + "/servlet");//路徑 //經過相應將Cookie保存到本地 response.addCookie(cookie); 定義一個惟一的Cookie domain+path+cookiename |
//獲取全部的cookie Cookie[] cs = request.getCookies(); //若是cookie不爲null,則獲取每一個cookie,並進行名稱的匹配 if(cs != null) { for (int i = 0; i < cs.length; i++) { //說明有上次的訪問時間 if("lastAccessTime".equals(cs[i].getName())) { out.println("上次的訪問時間是:" + cs[i].getValue()); } } } |
//Cookie沒法刪除 Cookie cookie = new Cookie("lastAccessTime",""); cookie.setMaxAge(0); response.addCookie(cookie); |
/* * 記住用戶名 * 記住歷史訪問記錄 */ public class LoginUIServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); //去那獲取用戶名?Cookie Cookie[] cs = request.getCookies(); //設置用戶名的默認值爲空字符串,若是沒有記住用戶名則爲空 String username = ""; String remember = ""; if(cs != null) { for (int i = 0; i < cs.length; i++) { if("username".equals(cs[i].getName())) { //若是進入到if語句,說明已經記住用戶名了 username = cs[i].getValue(); remember = "checked='checked'"; } } } out.println("<form action='"+request.getContextPath()+"/servlet/LoginServlet' method='post' >"); out.println("用戶名:<input type='text' name='username' value='"+username+"'/>"); out.println("<br />"); out.println("密碼:<input type='password' name='password'/>"); out.println("<br />"); out.println("記住用戶名:<input type='checkbox' name='remember' value='0' "+remember+"/>"); out.println("<br />"); out.println("<input type='submit' value='登錄'/>"); out.println("</form>"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } |
public class LoginServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); request.setCharacterEncoding("UTF-8"); String username = request.getParameter("username"); String password = request.getParameter("password"); String remember = request.getParameter("remember"); //何時記住用戶名? //若是不爲null,說明打勾了 Cookie cookie = new Cookie("username",username); cookie.setPath(request.getContextPath()); if(remember != null) { //記住用戶?記哪啊? //記在cookie中 cookie.setMaxAge(Integer.MAX_VALUE); } else { //刪除cookie cookie.setMaxAge(0); } response.addCookie(cookie); out.println("恭喜您,登錄成功,3秒後跳轉至首頁!!!"); //response.setHeader("Refresh", "3;URL=" + request.getContextPath()); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } |
//如何建立Session對象 HttpSession session = request.getSession(); //若是參數爲true,和上面同樣,沒有就建立,有就不建立 //若是參數爲false,有就返回,沒有就返回null //HttpSession session = request.getSession(true); session.setAttribute("username", "zhangsan"); System.out.println(session.getAttribute("username")); |
HttpSession session = request.getSession(); System.out.println(session.getAttribute("username")); |