HTTP協議的無狀態
在HTTP協議中無狀態的優缺點
a) HTTP交互是無狀態的
無狀態是指當浏覽器發送請求給服務器的時候服務器響應但是同一個浏覽器再發送請求給服務器的時候他會響應但是他不知道你就是剛才那個浏覽器
b) 優點
i 客戶浏覽器不會注意到服務器出現故障並重啟
ii 在服務器不需要先前信息時它的應答就較快
c) 缺點
i 對於事務處理沒有記憶能力可能導致每次連接傳送的數據量增大
ii 很難產生收集信息去產生良好用戶體驗的一組頁面
HTTP如果有狀態的好處
a) 減少數據的傳送量
b) 認證網頁可以收集用戶的認證信息
c) 可以定義用戶的對網頁的訪問權限
Cookie的原理和應用
Cookie
a) 定義
是一種由服務器發送給客戶的片段信息存儲在客戶端浏覽器的內在中或硬盤上在客戶隨後對該服務器的請求中發回它
b) Cookie規范
i Netscape規范(版本)
ii RFC(HTTP狀態管理機制版本)
c) 響應報頭
SetCookie: NAME=VALUE; Comment=value; Domain=value; MaxAge=value; Path=value; Secure; Version=*DIGIT
d) 其他
Cookie中文譯為小甜餅是由Netscape公司發明的Netscape公司也是最早開發浏覽器的公司在互聯網剛剛發展的前期它憑借著先入為主的優勢Netscape也曾經成為最流行的浏覽器但由於windows的普及微軟公司將IE浏覽器與windows進行綁定銷售Netscape逐漸銷聲匿跡不為人知了但現在大多數的互聯網協議與規范都源於Netscape公司的產品Cookie就是其中之後它是一種由服務器發送給客戶的片段信息它可以存儲在客戶端浏覽器的內在中或硬盤上然後在客戶隨後對該服務器的請求中發回它Cookie目前遵循的規范主要是兩種一個就是Netscape規范它的規范文件可以在找到另一個是RFC它的規范文件可以在上找到這兩個規范規定了在HTTP協議中關於cookie的報頭的形式比如在RFC規范中規定了響應報頭的形式是這樣子的Name是cookie的名字vlue是它的值Name=value屬性值對必須首先出現在此之後的屬性值對可以以任何順序出現Comment屬性是可選的因為cookies可能包含關於用戶私有的信息這個屬性允許服務器說明這個cookie的使用用戶可以檢查這個信息然後決定是否加入或繼續會話 Domain屬性是可選的用於指定Cookie在哪一個域有效所指定的域必須以點號開始Maxage屬性是可選可的用於定義Cookie的生存時間以秒為單位如果超過了這個時間客戶端應該丟棄這個cookie如果指定的秒數為表示這個cookie應該立即被丟棄Path屬性是可選的用於指定這個cookie在哪一個URL子集下有效Secure屬性是可選的它沒有值用於指示浏覽器使用安全的方式與服務器交互Version屬性是必需的它的值是一個十進制的整數標識cookie依照的狀態管理規范的版本對於RFC Version應該設為
使用Cookie編程
a) 特點
i 以鍵值對的方式記錄會話跟蹤的內容
ii Cookie的持久性較高
iii 用戶可以手動限制cookie的使用
iv Session可以用來替代Cookie
設置一個Cookie
a) 創建cookie:
Cookie c = new Cookie("MyName" "MyValue");
b) Cookie的方法
i getConnment()setComment(String purpose)
ii getDomain()setDomain(String pattern)
iii getMaxAge()setMaxAge(int expiry)
iv getName()getValue()
v setValue(String newValue)
vi getPath()setpath(String uri)
c) 使用cookie
i ResponseaddCookie()
ii RequestgetCoonkie()
實例—登錄程序
a) 功能
i 使用cookie來保存用戶登錄信息
ii 初次登錄將信息保存到客戶端的硬盤上
iii 再次訪問先驗證用戶登錄信息通過後顯示歡迎信息
b) 步驟
i 第一步編寫LoginServletjava和GreetServletjava
ii 第二步編譯JAVA源文件
iii 第三步部署servlet
實例—LoginSerlvet
實例—GreetServlet
向浏覽器輸出會話
a) Cookie
i 跟蹤跟浏覽器有關的會話
ii 有些浏覽器不支持
iii 有些用戶由於安全原因不使用
b) 重寫URL
i 通過一個請求URL的會話ID把一個會話綁定到一個浏覽器上
ii 耗費時間去掃描頁面和URL重定向
iii 使用encodeURL()和encodeRedirectURL()
Session的原理和應用
Session
a) 定義
i 一個浏覽器到一個服務器相關的HTTP交互的集合
ii 是被浏覽器訪問的Servlet獲取的與那些交互相關的數據集合
b) javaxservlet支持的接口
HttpSession接口
a) HttpSession接口中的方法
i public Object getAttribute(String name)
ii public void setAttribute(String nameObject value)
iii public void removeAttribute(String name)
iv public int setMaxInactiveInterval()
v public void invalidate()
補充說明
a) Servlet運行就會創建會話
b) Servlet可以通過下面的方法來獲得session對象:
getSession()
c) 任何servlet可以請求創建會話
d) 對處理目標浏覽器中請求的所有Servlet都可以訪問會話中的信息
e) 會話會由於浏覽器的不活躍而超時而失效
Cookie和Session比較
a) session
i 由服務器端創建
ii 由服務端保存信息
iii 打開新的浏覽器就會開始一次新的會話
b) Cookie
i 由服務器發送給客戶端的片段信息存儲在客戶端浏覽器的內存中或硬盤上
ii 由客戶端保存信息
iii 在cookie有效期間內多個浏覽器可訪問同一個cookie對象
回顧Cookie和Session
Cookie在一個浏覽器中存儲一個變量和對應的值
Cookie可以由浏覽器用戶配置
不是所有的浏覽器都支持Cookie
可以使用addCookie()和getCookie ()方法獲取Cookie
session是由浏覽器和網絡服務器之間的交互所關聯的數據集合
每打開一個浏覽器就會創建一個新的session對象
會話開發時存在下列方法:
getSession()
setAttribute(key value)
getAttribute(key)
From:http://tw.wingwit.com/Article/program/Oracle/201311/19004.html