㈠ android 連接Http的時候有session嗎
當Android應用程序訪問WEB伺服器的時候,我們為了與伺服器保持同一會話,也就是說當前登錄用戶與伺服器的交互是在同一個SessionId下。當我們登錄成功的時候,可以通過HTTP請求獲取到Cookie信息,其中包括會話的SessionId,同時也可以自己將SessionId放入Json中返回。Session我們可以用一個靜態變數來存放,每次向伺服器發送請求的時候將SessionId帶過去,伺服器會自動檢驗這個SessionId有沒有失效。DefaultHttpClient httpclient = new DefaultHttpClient();HttpPost httpPost = new HttpPost(訪問地址);httpPost.setHeader("Cookie", "JSESSIONID=" + 我們在靜態變數里存放的SessionId);HttpResponse httpResponse = httpclient.execute(httpPost);這樣就可以將SessionId帶過去了。
㈡ 手機android 和php 通信時候,怎麼存session
// 定義HttpClient
HttpClient client = new DefaultHttpClient();
HttpClientParams.setCookiePolicy(client.getParams(),
CookiePolicy.BROWSER_COMPATIBILITY);
// 實例化http方法
HttpPost request = new HttpPost(SYRG.HTTP+"/site/login");
request.addHeader("X-Requested-With", "XMLHttpRequest");
// 創建名/值組列表
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("LoginForm[username]", username));
params.add(new BasicNameValuePair("LoginForm[password]", pwd));
params.add(new BasicNameValuePair("android", "true"));
// 創建UrlEncodedFormEntity對象
UrlEncodedFormEntity formEntiry;
try {
formEntiry = new UrlEncodedFormEntity(params);
request.setEntity(formEntiry);
// 執行請求
HttpResponse response = client.execute(request);
// 讀取cookie並保存文件
SYRG.cookies = ((AbstractHttpClient) client).getCookieStore()
.getCookies();
String strcookies = SYRG.cookies.get(0).getName().toString() + "=" + SYRG.cookies.get(0).getValue().toString();
System.out.println("登陸的cookies="+strcookies);
HttpEntity entity = response.getEntity();
if (entity != null) {
BufferedReader read = new BufferedReader(new InputStreamReader(
entity.getContent()));
result = read.readLine();
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
把這個cookie以addhear的形式傳給後台,你可以保存到本地,然後下次用的時候直接讀取本地的文件
㈢ android與WEB伺服器交互時,如何保證在同一個會話Session中通信
最近在開發項目的過程中,遇到android與web伺服器要在同一session下通信的問題。在解決問題前先回顧下Session與Cookie:Cookie和Session都為了用來保存狀態信息,都是保存客戶端狀態的機制,它們都是為了解決HTTP無狀態的問題而所做的努力。Session可以用Cookie來實現,也可以用URL回寫的機制來實現。Cookie和Session有以下明顯的不同點:1)Cookie將狀態保存在客戶端,Session將狀態保存在伺服器端;2)Cookies是伺服器在本地機器上存儲的小段文本並隨每一個請求發送至同一個伺服器。網路伺服器用HTTP頭向客戶端發送cookies,在客戶終端,瀏覽器解析這些cookies並將它們保存為一個本地文件,它會自動將同一伺服器的任何請求縛上這些cookies。3)Session是針對每一個用戶的,變數的值保存在伺服器上,用一個sessionID來區分是不同用戶session變數,這個值是通過用戶的瀏覽器在訪問的時候返回給伺服器,當客戶禁用cookie時,這個值也可能設置為由get來返回給伺服器;4)就安全性來說:當你訪問一個使用session 的站點,同時在自己機器上建立一個cookie,建議在伺服器端的SESSION機制更安全些.因為它不會任意讀取客戶存儲的信息。Session機制Session機制是一種伺服器端的機制,伺服器使用一種類似於散列表的結構(也可能就是使用散列表)來保存信息。當程序需要為某個客戶端的請求創建一個session的時候,伺服器首先檢查這個客戶端的請求里是否已包含了一個session標識 - 稱為 session id,如果已包含一個session id則說明以前已經為此客戶端創建過session,伺服器就按照session id把這個 session檢索出來使用(如果檢索不到,可能會新建一個),如果客戶端請求不包含session id,則為此客戶端創建一個session並且生成一個與此session相關聯的session id,session id的值應該是一個既不會重復,又不容易被找到規律以仿造的字元串,這個 session id將被在本次響應中返回給客戶端保存。Session的實現方式1) 使用Cookie來實現伺服器給每個Session分配一個唯一的JSESSIONID,並通過Cookie發送給客戶端。當客戶端發起新的請求的時候,將在Cookie頭中攜帶這個JSESSIONID。這樣伺服器能夠找到這個客戶端對應的Session。2 )使用URL回顯來實現URL回寫是指伺服器在發送給瀏覽器頁面的所有鏈接中都攜帶JSESSIONID的參數,這樣客戶端點擊任何一個鏈接都會把JSESSIONID帶給伺服器。 如果直接在瀏覽器中輸入url來請求資源,Session是匹配不到的。Tomcat對 Session的實現,是一開始同時使用Cookie和URL回寫機制,如果發現客戶端支持Cookie,就繼續使用Cookie,停止使用URL回寫。如果發現Cookie被禁用,就一直使用URL回寫。jsp開發處理到Session的時候,對頁面中的鏈接記得使用 response.encodeURL() 。回顧完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=,是鍵值對,不是單指值發送設置cookie: URL url = new URL(requrl); HttpURLConnectioncon= (HttpURLConnection) url.openConnection();
㈣ Android 客戶端 與java web伺服器端 session問題
為什麼非要web端和客戶端同一個對象呢?你客戶端修改密碼,應該給你發送命令,裡麵包含客戶端設置裡面的舊密碼,和新密碼。你在web端接收到後,比較舊密碼和你session對象裡面的密碼是否一致,是的話執行session.setpassword("新密碼");不一樣則,回復客戶端,原始密碼輸入錯誤。這個邏輯才是對的,服務端和客戶端要分離開,獨立性原則。盡量不要用相同對象,如果你用一樣的,那麼客戶端開源直接修改服務端session裡面的所有數據。這樣的程序誰敢用?
㈤ android 用httpclient登錄無法保持會話狀態 最後兩次請求的cookie都不一樣!我明明設成一樣了
loginResult = EntityUtils.toString(loginResponse.getEntity(), "utf-8");
得判斷是否真成功了。 另外伺服器送來的cookie是否一樣,那要看伺服器送什麼回來。現在這樣單方面調試,很費勁的
㈥ 安卓與伺服器之間的session機制一般是怎麼實現的
Cookie和Session都為了用來保存狀態信息,都是保存客戶端狀態的機制,它們都是為了解決HTTP無狀態的問題而所做的努力。
Session可以用Cookie來實現,也可以用URL回寫的機制來實現。
Cookie和Session有以下明顯的不同點:
1)Cookie將狀態保存在客戶端,Session將狀態保存在伺服器端;
2)Cookies是伺服器在本地機器上存儲的小段文本並隨每一個請求發送至同一個伺服器。網路伺服器用HTTP頭向客戶端發送cookies,在客戶終端,瀏覽器解析這些cookies並將它們保存為一個本地文件,它會自動將同一伺服器的任何請求縛上這些cookies。
3)Session是針對每一個用戶的,變數的值保存在伺服器上,用一個sessionID來區分是不同用戶session變數,這個值是通過用戶的瀏覽器在訪問的時候返回給伺服器,當客戶禁用cookie時,這個值也可能設置為由get來返回給伺服器;
4)就安全性來說:當你訪問一個使用session 的站點,同時在自己機器上建立一個cookie,建議在伺服器端的SESSION機制更安全些.因為它不會任意讀取客戶存儲的信息。
㈦ android session 保持問題
你將session 保存在手機端,可以一直保存,可以定期清除,android sharedpreferences 去谷歌
㈧ android 有session嗎
沒有session 當時有類似session 的類