項目中需要保持http的session狀態(tài),研究了一下http中保持會話的資料,總結(jié)如下
http協(xié)議是面向無連接的協(xié)議,一次請求,一次操作,然后就結(jié)束了,是沒有狀態(tài)的。然后在實際應
用中需要保存用戶信息的時候,可以采用cookie和session這2種方式,cookie是保存在客戶端,
session是保存在服務器端的,個人覺得session比較安全。網(wǎng)上看資料,說是session的實現(xiàn),是服務
器在內(nèi)存中開辟一段內(nèi)存區(qū)域,返回一個索引,即生成一個sessionid,發(fā)送到客戶端,在客戶端下一
次發(fā)送請求的時候?qū)essionid回傳,則服務器可以找到用戶的信息,相當于實現(xiàn)了狀態(tài)的保持,因此
客戶端還是要保存這個sessionid,我測試了一下在返回的response結(jié)果集中,將cookie鍵值對保存,
在下次發(fā)送請求的時候,將這個鍵值對以cookie的方式發(fā)送,結(jié)果成果。測試的例子是ww.our023.com
,測試結(jié)果很成果,如果沒有登錄,則返回的是無效的結(jié)果,但是如果登錄了,然后將cookie中的內(nèi)
容在下一次的請求中發(fā)送,則相當于包sessionid一起發(fā)送過去,則session狀態(tài)保持成功。在cookie
中的鍵值對名,關(guān)系到sessionid的鍵值對,命名不知道是正面來的,反正接受到的參數(shù)都回傳就是了
,這個估計和具體的服務器有一定的關(guān)系,或是和開發(fā)后臺web的語言有一定關(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();
//如果包含則代表返回的頁面不是錯誤頁面
System.out.println("測試登錄結(jié)果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值,其中包含了上一次請求時服務器放回的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();
//如果包含則代表返回的頁面不是錯誤頁面,則說明session狀態(tài)保持成功
System.out.println("測試搜索結(jié)果2222,是否包含testyuce:" + doc.html().contains("testyuce"));
//如果熟悉html語言,可以看到返回的結(jié)果集合
// System.out.println(doc.html());
System.out.println("===============================================");
}
注:測試中用到了解析html的開源包jsoup