**會話技術_Cookie& Session [web基礎day16] *
阿新 • • 發佈:2019-01-02
今日內容
1.會話技術
* Cookie
* Session
2.JSP:入門學習
會話技術
1.會話:一次會話中包含多次請求和響應 * 一次會話:瀏覽器第一次給伺服器資源傳送請求,會話建立,一直到某一端斷開連線,會話結束。 2.功能:共享資料(在一次會話的範圍內共享資料) * 瀏覽器和伺服器是無狀態請求,就是說,每次的請求之間相互獨立,互不溝通。通過會話技術,可以讓伺服器和瀏覽器在多次請求間共享資料。 3.方式:會話技術:每次請求和響應之間本質是無法共享資料的,但是我們可以把請求響應的資料儲存在瀏覽器或者伺服器,相當於就可以間接的進行資料的交流。 1.客戶端會話技術:Cookie 2.伺服器端會話技術:Session
Cookie:將資料最終儲存在瀏覽器端的會話技術,可以讓多次請求之間實現資料的交流。
1.概念:客戶端會話技術,將資料儲存在客戶端。 2.快速入門: * 使用步驟: 1.建立Cookie物件,繫結資料 * new Cookie(String name,String value); 2.傳送Cookie物件。 * response.addCookie(Cookie cookie) 3.獲取Cookie,拿到資料。 * Cookie[] request.getCookies() -- 注意:只要是一次會話,Cookie會一直帶著。 3.原理: * 基於響應頭set-cookie和請求頭cookie實現 4.cookie實現的細節: 1.一次可不可以傳送多個cookie? * 可以,可以建立多個cookie物件,使用response呼叫多次addCookie方法傳送cookie即可。 2.cookie在瀏覽器中儲存多長時間? * 預設情況下,當瀏覽器關閉後,Cookie資料被銷燬 * 持久化儲存: * setMaxAge(int seconds) 該方法引數有三種取值,如下: 1.正數:將Cookie資料寫到硬碟的檔案中。持久化儲存。cookie存活時間,設定正數,單位是秒。 2.負數:預設值 eg:cookie.setMaxAge(0); 3.零:刪除cookie資訊 3.cookie能不能存中文? * 在tomcat 8之前 ,cookie中不能直接儲存中文資料。 * 需要將中文資料轉碼---一般採用URL編碼(%E3...) * 在tomcat 8之後,cookie支援中文資料。特殊字元還是不支援,建議採用URL編碼儲存,URL解析。 4.cookie共享問題? 1. 假設在一個tomcat伺服器中,部署了多個web專案,那麼在這些web專案中cookie能不能共享? * 預設情況下cookie不能共享。 * setPath(String path):設定cookie的獲取的範圍。預設情況下,設定當前的虛擬目錄。 * 如果要共享,則可以將path設定為"/" eg: c1.setPath("/") 2.不同的tomcat伺服器間cookie共享問題。 * setDomain(String path):如果設定一級域名相同,那麼多個伺服器之間cookie可以共享。 * setDomain(".baidu.com"),那麼tieba.baidu.com和news.baidu.com中cookie可以共享。 5.Cookie的特點和作用: 1.cookie儲存資料在客戶端瀏覽器。 不太安全:容易丟失和被篡改 2.瀏覽器對於單個cookie的大小有限制(4kb),以及對同一個域名下的總cookie數量也有限制(20個),每個瀏覽器的個數和大小限制也有可能不一樣。 * 作用: 1.cookie一般用於儲存少量的,不太敏感的資料 2.在不登入的情況下,完成伺服器對客戶端的身份識別。 案例:記住上一次的訪問時間 需求: 1.訪問一個Servlet,如果是第一次訪問,則提示:您好,歡迎您首次訪問 2.如果不是第一次訪問,則提示:歡迎回來,您上次訪問時間為:顯示時間字串。 注意: * 第一次訪問,沒有cookie資料,則為null,需要加一個非空判斷 * 在Cookie中不能儲存空格等特殊字元,所以我們儲存的是時間毫秒值。 * 當回顯給瀏覽器的時候,我們會將事件毫秒值轉換為一個特定改格式的日期字串。 * 在登入案例的時候,判斷兩個是否相等應該判斷字串名稱是否相等。
JSP: 入門學習
1.概念: * Java Server Pages:java服務端頁面 * 可以理解為:一個特殊的頁面 * 用於簡化書寫! -- JSP:幫我們把JSP中的內容,轉換為Java程式碼,免去了我們自己用write("<html>...</html>") . 2.原理: * JSP本質上就是一個Servlet * 伺服器會幫我們把JSP頁面轉換為一個Servlet,把JSP中的java程式碼,原樣展示。把JSP中的html標籤,會幫我們用out.write("標籤"); * JSP頁面中:html中的內容 java程式碼 1.伺服器解析請求訊息,找是否有index.jsp資源 2.如果找到了,會將index.jsp轉換為.java檔案 3.編譯.java檔案,生成.class位元組碼檔案 4.由位元組碼檔案提供訪問 3.JSP的指令碼:JSP定義Java程式碼的方式。 1.<% 程式碼 %>:定義的java程式碼,在service方法中。service中可以定義什麼,該指令碼中就可以定義什麼。 2.<%! 程式碼 %>:定義的java程式碼,定義成員變數和成員方法 3.<%= 程式碼 %>:定義的java程式碼,會輸出到液麵上。輸出語句是什麼 (它是定義在service中,如果輸出區域性和成員變數同樣的變數的時候,輸出採用就近原則輸出區域性變數,它類似於System.out.print( 程式碼 ) 或 out.write( 程式碼 ) ) * 總之,帶!的定義在java類成員位置,帶=輸出,其他的都放在service中,我們儘量不要定義成員變數,在多執行緒中容易引發執行緒安全問題。 4.JSP的內建物件: * 在jsp頁面中不需要獲取和建立,可以直接使用的物件 * jsp一共有9個內建物件 * 今天學習3個: * request * response * out:字元輸出流物件。可以將資料輸出到頁面上。和response.getWriter()類似。 * response.getwriter()和out.writer的區別: -- 在tmocat伺服器真正給客戶端做出響應之前,會先找response緩衝區資料,再找out緩衝區數區。所以response.getwriter永遠列印在out.writer前,out.writer列印會在什麼位置列印就會出現在什麼位置。所以建議使用out.writer列印。使用response會容易影響頁面佈局。
Session:主菜
1.概念:伺服器端會話技術,在一次會話的多次請求間共享資料,將資料儲存在伺服器端的物件中。HttpSession。
2.快速入門:
1.獲取HttpSession物件:
* HttpSession session=request.getSession
2.使用HttpSession物件:
* Object getAttribute()
* void setAttribute()
* void removeAttribute()
3.原理:
* 舉一個例子:伺服器相當於銀行,而客戶端相當於客戶。銀行辦卡(request.getSession)充錢(setAttribute),然後把帶著卡號的卡給了客戶,錢儲存在了銀行。第二次客戶來銀行取錢。然後拿著卡號找自己對應的金額資訊,獲取到了金錢。過程依賴於Cookie
4.細節:
1.當客戶端關閉後,伺服器不關閉,兩次獲取Session是否為同一個?
* 預設情況下,不是。
* 如果需要相同,則可以建立Cookie,鍵為JSESSIONID,值為id的值,設定最大存活時間,讓cookie持久化存活。
* Cookie c=new Cookie("JsessionID","session.getId()")
* c.setMaxAge(60*60);
* response.addCookie(c);
2.客戶端不關閉,伺服器關閉後,兩次獲取的Session是同一個嗎?
* 不是同一個:
* 伺服器重新啟動後,建立的Session物件的記憶體地址不同,所以儲存的資料會丟失。
* 可以使用session的鈍化和活化解決:
* session的鈍化:在伺服器正常關閉之前,將sessiond物件序列化到硬碟上
* session的活化:在伺服器啟動後,將session檔案轉化為記憶體中的session物件即可。
3.session什麼時候被銷燬?
1.伺服器被關閉
2.session物件呼叫invalidate()
3.session預設失效時間是30分鐘
選擇性配置修改:
<session-config>
<session-timeout>30</session-timeout>
</session-config>
5.session的特點:
1.session用於儲存一次會話的多次請求的資料,存在伺服器端。
2.session可以儲存任意型別,任意大小的資料。
* session與Cookie的區別:
1.session儲存資料在伺服器端,Cookie在客戶端
2.session沒有資料大小限制,Cookie有
3.session資料安全,Cookie相對不安全(因為Cookie儲存在客戶端,容易丟失和被篡改)
案例:驗證碼
1.案例需求:
1.訪問帶有驗證碼的登入頁面login.jsp
2.使用者輸入使用者名稱,密碼以及驗證碼。
* 如果使用者名稱和密碼輸入有誤,跳轉登入頁面,提示:使用者名稱或密碼錯誤
* 如果驗證碼輸入有誤,跳轉登入頁面,提示:驗證碼錯誤
* 如果全部輸入正確,則跳轉到主頁success.jsp,顯示:使用者名稱,歡迎您。