回顧完Session和Cookie,我們來說說爲什麼手機端與服務器交互沒有實現在同一session下?
1)原因很簡單,就是因爲android手機端在訪問web服務器時,沒有給http請求頭部設置sessionID,而使用web瀏覽器作爲客戶端訪問服務器時,在客戶端每次發起請求的時候,都會將交互中的sessionID:JSESSIONID設置在Cookie頭中攜帶過去,服務器根據這個sessionID獲取對應的Session,而不是重新創建一個新Session(除了這個Session失效)。
以java.net.HttpURLConnection發起請求爲例:
獲取Cookie:
URL url = new URL(requrl);
HttpURLConnection con= (HttpURLConnection) url.openConnection();
// 取得sessionid.
String cookieval = con.getHeaderField("set-cookie");
String sessionid;
if(cookieval != null) {
sessionid = cookieval.substring(0, cookieval.indexOf(";"));
}
//sessionid值格式:JSESSIONID=AD5F5C9EEB16C71EC3725DBF209F6178,是鍵值對,不是單指值
發送設置cookie:
URL url = new URL(requrl);
HttpURLConnectioncon= (HttpURLConnection) url.openConnection();
if(sessionid != null) {
con.setRequestProperty("cookie", sessionid);
}
只要設置了sessionID,這樣web服務器在接受請求的時候就會自動搜索對應的session了,從而保證了在同一會話Session。
http://my.oschina.net/janson2013/blog/111050
其實就是登陸成功之後 ,保存SESSIONID。然後每次請求的時間帶上這個SESSIONID。