將瀏覽器與web伺服器之間多次互動當做乙個整體來處理,並且將
多次互動所涉及的資料(即狀態)儲存下來。
方式一: 將狀態儲存在瀏覽器端(使用cookie)。
方式二: 將狀態儲存在伺服器端(使用session)。
伺服器臨時存放在瀏覽器端的少量資料,用於存放使用者的狀態。
注:
當瀏覽器第一次訪問伺服器時,伺服器會將少量資料以
set-cookie訊息頭的形式傳送給瀏覽器,瀏覽器會將這些
資料儲存下來。
當瀏覽器再次訪問伺服器,會將這些資料以cookie訊息頭的
形式傳送給伺服器。
cookie c = new cookie(string name,string value);
response.addcookie(c);
注: cookie只能存放字串。
cookie都有乙個名字,值是乙個字串。
cookie request.getcookies();
注: 該方法有可能返回值為null。
string cookie.getname();
string cookie.getvalue();
預設情況下,瀏覽器會將cookie存放到記憶體裡面,瀏覽器關閉,則
cookie會被刪除。
cookie.setmaxage(int seconds);
注: 單位是秒。
比如儲存乙個月 30 * 24 * 60 * 60
seconds > 0時:
瀏覽器會將cookie儲存在硬碟上(一般是乙個小的檔案),
超過指定時間,瀏覽器會將cookie刪除。
seconds < 0時:
預設值(瀏覽器會將cookie存放到記憶體裡面)。
seconds = 0時:
瀏覽器會刪除該cookie。
比如,要刪除乙個名稱為username的cookie:
cookie c = new cookie("username","");
c.setmaxage(0);
response.addcookie(c);
cookie只能存放合法的ascii字元,如果要存放中文,需要將中文轉換成
對應的ascii字元的形式(即編碼)。
string urlencoder.encode(string str,string charset);
string urldecoder.decode(string str,string charset);
建議,在新增cookie時,統一編碼處理。
a.什麼是cookie的路徑問題?
瀏覽器在向伺服器發請求時,會比較請求位址是否符合cookie的
路徑,只有符合條件的cookie才會傳送給伺服器。
b.cookie的預設路徑
等於新增該cookie的web元件的路徑。比如,/day06/biz01/addcookie.jsp,則該jsp新增的cookie,則該cookie的路徑就是
"/day06/biz01"。
c.匹配規則
請求位址要麼等於cookie的路徑,要麼是其子路徑,符合該要求的
cookie會被傳送。
比如,cookie的路徑是"/day06/biz01",則
"/day06/findcookie1.jsp" no
"/day06/biz01/findcookie2.jsp" yes
"/day06/biz01/sub/findcookie3.jsp" yes
d.修改cookie的路徑
cookie.setpath(string path);
a.cookie可以被使用者禁止。
b.cookie不安全。
cookie是一種客戶端的狀態管理技術,資料都儲存在瀏覽器端,
所以,對於敏感資料,一定要加密處理。
c.cookie只能儲存少量資料。
大約是4k左右。
d.cookie的數量也有限制。
大約是幾百個。
e.cookie只能存放字串。
伺服器端為了儲存使用者的狀態而建立的乙個特殊的物件。
注:
當瀏覽器第一次訪問伺服器時,伺服器建立乙個特殊的物件
(該物件一般稱之為session物件,session物件有乙個唯一的
id,一般稱之為sessionid)。伺服器會將sessionid以cookie
的方式傳送給瀏覽器。
當瀏覽器再次訪問伺服器時,會將sessionid會送過來,伺服器
可以依據sessionid找到對應的session物件。
httpsession session = request.getsession(boolean flag)
注:
httpsession是乙個介面。
當flag為true時:
先檢視請求當中是否有sessionid,如果沒有,則建立乙個
session物件。如果有,則依據sessionid查詢對應的session
物件,找到了則返回該物件,找不到,則建立乙個新的session物件。
當flag為false時:
先檢視請求當中是否有sessionid,如果沒有,返回null。
如果有,則依據sessionid查詢對應的session
物件,找到了則返回該物件,找不到,返回null。
httpsession session = request.getsession();
注:
等價於request.getsession(true);
//綁訂資料
session.setattribute(string name,object obj);
//依據綁訂名,獲得綁訂值,如果綁訂值不存在,返回null
object session.getattribute(string name);
//解除綁訂
session.removeattribute(string name);
什麼是session超時?
伺服器會將空閒時間過長的session物件刪除掉。
目的是為了節省記憶體空間。
注: 大部分伺服器預設的超時時間限制是30分鐘。
如何修改超時時間?
方式一 修改伺服器的配置檔案(web.xml)
30方式二 session.setmaxinactiveinterval(int seconds);
注: 該方法用於設定兩次請求之間的最大間隔時間,如果超過這個時間,session物件會被銷毀。
session.invalidate()
step1. 登入成功以後,在session物件上綁訂一些資料。比如:
session.setattribute("user",user);
step2. 當使用者訪問需要保護的資源時(即只有登入之後的使用者才能訪問的
資源),進行session驗證:
object obj = session.getattribute("user");
if(obj == null)
session支援更豐富的資料型別(cookie只能存放字串)、更安全、
可以存放更多的資料(cookie只能存放少量的資料)。
但是,session是將狀態儲存在伺服器端,有可能會占用過多的記憶體。
不以"/"開頭的路徑。
以"/"開頭的路徑。
鏈結、表單提交、重定向從應用名開始寫;
**從應用名之後開始寫。
注:
不要將應用名直接寫在路徑裡面,而應該
使用request.getcontextpath()來獲得實際
部署時的應用名。
servlet學習總結五
forward和redirect區別 forward直接請求 是伺服器端行為,web容器接受請求後,之後的跳轉處理都是在服務端內部,客戶端並不知道,redirect間接請求 重定向,是客戶端行為,客戶端每次發出請求,服務端都會給返回給客戶端乙個狀態碼和新的location位址,客戶端拿到狀態碼之後在...
servlet學習總結六
cookie和session http協議是無狀態的,為了實現會話跟蹤,使用cookie和session。cookie是server向client寫入的一段資訊,使用鍵值對,name value 存放。session是儲存在服務端的,客戶端訪問服務的時候,服務端將客戶端的資訊以某種形式儲存起來。se...
Servlet元件學習總結
一 servlet的配置 aservlet com.neuedu.servlet.aservlet aservlet bservlet 瀏覽器位址列中請求的url和我們這裡標籤中的對映一致的時候,我們自定義的servlet類才會處理這個請求 二 servletconfig servletconfig...