day09(--Cookie與Session)

1、會話html

1.   一次對話,可能說了不少句:瀏覽器

2.   Web開發中的會話:緩存

l  打開瀏覽器,點擊了多個鏈接(發出了屢次的請求)tomcat

l  會話共享屢次請求的數據服務器

2、Cookie(客戶端的文件中)è不能夠存對象,能夠存儲字符串類型的數據

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  setMaxAgecookic能保存多久保存永久: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();項目路徑

3、Session(服務端的內存中) è能夠存對象和字符串

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

4、防止重複提交

1.   連續點擊:

2.   返回頁面緩存繼續提交:

l  整一個隨機數 UUID static randomUUID(); 標識同步的原理

l  第一次提交時session 和表單中有一個一樣的標識

l  第一次提交成功後把session的標識清空

l  第二次重複提交時對session作重複判斷

l  提交後讓按鈕失效

5、session生命週期

1.   服務器重啓

2.   長時間不響應:鈍化 存到磁盤中 session中的對象存在tomcat/work目錄下

  <session-config> //配置鈍化時間

    <session-timeout> </session-timeout> //單位是分鐘

</session-config>

默認是30分鐘

3.   建立一個新的session,更改jsessionID

6、Cookie禁止

1.   禁止cookiesession不能用,session的頭是cookie

2.   若是瀏覽器禁止了cookie,能夠手動帶上jsessionID。可是比較麻煩

3.   URL進行處理,能夠自動在cookie禁止的狀況下建立jsession

7、代碼:

一、代碼1建立一個Cookie

//獲取當前時間

String now = new Date(). toLocaleString ();

//建立一個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

二、代碼2獲取Cookie

    //獲取全部的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());

              }

        }

    }

三、代碼3刪除一個Cookie

    //Cookie沒法刪除

    Cookie cookie = new Cookie("lastAccessTime","");

    cookie.setMaxAge(0);

    response.addCookie(cookie);

四、代碼4記住用戶名

/*

 * 記住用戶名

 * 記住歷史訪問記錄

 */

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);

    }

}

五、代碼5建立一個Session

    //如何建立Session對象

    HttpSession session = request.getSession();

    //若是參數爲true,和上面同樣,沒有就建立,有就不建立

    //若是參數爲false,有就返回,沒有就返回null

    //HttpSession session = request.getSession(true);

    session.setAttribute("username", "zhangsan");

    System.out.println(session.getAttribute("username"));

六、代碼6 servlet獲取Session

    HttpSession session = request.getSession();

    System.out.println(session.getAttribute("username"));

相關文章
相關標籤/搜索