項目中需要保持http的session狀態(tài),研究了一下http中保持會(huì )話(huà)的資料,總結如下
http協(xié)議是面向無(wú)連接的協(xié)議,一次請求,一次操作,然后就結束了,是沒(méi)有狀態(tài)的。然后在實(shí)際應
用中需要保存用戶(hù)信息的時(shí)候,可以采用cookie和session這2種方式,cookie是保存在客戶(hù)端,
session是保存在服務(wù)器端的,個(gè)人覺(jué)得session比較安全。網(wǎng)上看資料,說(shuō)是session的實(shí)現,是服務(wù)
器在內存中開(kāi)辟一段內存區域,返回一個(gè)索引,即生成一個(gè)sessionid,發(fā)送到客戶(hù)端,在客戶(hù)端下一
次發(fā)送請求的時(shí)候將sessionid回傳,則服務(wù)器可以找到用戶(hù)的信息,相當于實(shí)現了狀態(tài)的保持,因此
客戶(hù)端還是要保存這個(gè)sessionid,我測試了一下在返回的response結果集中,將cookie鍵值對保存,
在下次發(fā)送請求的時(shí)候,將這個(gè)鍵值對以cookie的方式發(fā)送,結果成果。測試的例子是ww.our023.com
,測試結果很成果,如果沒(méi)有登錄,則返回的是無(wú)效的結果,但是如果登錄了,然后將cookie中的內
容在下一次的請求中發(fā)送,則相當于包sessionid一起發(fā)送過(guò)去,則session狀態(tài)保持成功。在cookie
中的鍵值對名,關(guān)系到sessionid的鍵值對,命名不知道是正面來(lái)的,反正接受到的參數都回傳就是了
,這個(gè)估計和具體的服務(wù)器有一定的關(guān)系,或是和開(kāi)發(fā)后臺web的語(yǔ)言有一定關(guān)系,在此不在研究。
例子如下:
public static void main(String[] args) throws Exception {
String userName = "testyuce";
String password = "123456";
Map<String, String> loginData = new HashMap<String, String>();
loginData.put("username", userName);
loginData.put("password", password);
loginData.put("radio", "31536000");
loginData.put("referer", "/bbs");
//登錄地址
Connection con = Jsoup.connect("http://www.our023.com/bbs/logging.php?action=login&loginsubmit=1");
con.data(loginData);
Response response = con.execute();
Document doc = response.parse();
//如果包含則代表返回的頁(yè)面不是錯誤頁(yè)面
System.out.println("測試登錄結果11111,是否包含testyuce:" + doc.html().contains("testyuce"));
// System.out.println(doc.html());
System.out.println("==============================================");
Map<String, String> cookie = response.cookies();
//搜索地址
Connection conSearch = Jsoup.connect("http://www.our023.com/bbs/search.php?srchtxt=重慶&srchtype=title&searchsubmit=yes");
//設置請求時(shí)的cookie值,其中包含了上一次請求時(shí)服務(wù)器放回的sessionid
Iterator<Entry<String, String>> iterCookie = cookie.entrySet().iterator();
while(iterCookie.hasNext()){
Entry<String, String> entry = iterCookie.next();
conSearch.cookie(entry.getKey(), entry.getValue());
}
doc = conSearch.get();
//如果包含則代表返回的頁(yè)面不是錯誤頁(yè)面,則說(shuō)明session狀態(tài)保持成功
System.out.println("測試搜索結果2222,是否包含testyuce:" + doc.html().contains("testyuce"));
//如果熟悉html語(yǔ)言,可以看到返回的結果集合
// System.out.println(doc.html());
System.out.println("===============================================");
}
注:測試中用到了解析html的開(kāi)源包jsoup