1. 程式人生 > >Android終端APP訪問伺服器保持在同一個session的方式

Android終端APP訪問伺服器保持在同一個session的方式

在實際開發中,會有這樣一個問題:

WEB應用為了做到安全性更好,會將登入成功的使用者資訊儲存在session中,並且使用過濾器進行登入攔截。只有登入後的使用者才能繼續操作,沒有登入的使用者會提示他去登入。比如,阿里雲郵箱登入後才能看到郵件的詳細內容,當頁面長時間沒有被使用者操作,會提示使用者登入超時,需要重新登入。這樣的場景在web專案中都會有,登入資訊基本是被儲存在伺服器的session中。

session就是一次會話,一個使用者使用同一個瀏覽器登陸同一個web網站,就會產生一個跟此使用者對應的session物件,多個瀏覽器或者多個使用者的session是獨立並且唯一的,互不干擾。而session又是儲存在伺服器端的物件,所以安全性比較好。一般會把登入成功的使用者資訊儲存在session中,要用到使用者資訊就從session中取,一般web專案判斷使用者是否登入了,就是判斷session中是否有使用者資訊。

如果Android手機端APP和Web共用一個後臺,則android就需要保證使用者的每一個訪問連結都是在同一個session中,在android中怎麼保證在同一個session中,具體程式碼如下。

在登入成功的返回方法中新增如下獲取sessionId的程式碼:

// 取得sessionid. 
				String cookieValue = httpURLConnection.getHeaderField("set-cookie"); 
				
				if(cookieValue != null) { 
					sessionid = cookieValue.substring(0, cookieValue.indexOf(";")); 
					//獲得到sessionId之後,可以將sessionId儲存在磁碟,使用SharePreference
				}

在之後的每一個請求連線中新增cookie請求頭資訊,程式碼如下:
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
			httpURLConnection.setRequestProperty("cookie", sessionId); //這裡是主要的程式碼
			httpURLConnection.connect();
通過session,可以做到自動登入。做自動登入需要將sessionId儲存到本地磁碟中(持久化儲存)。下載請求後臺伺服器的時候將sessionid如上程式碼一起傳遞就行。但是要注意一個問題就是session也是有有效期的,session的有效期預設是30分鐘,30分鐘之後需要再次登入,當然也可以修改session的有效期,具體修改方法網上很多,谷歌一下就行了。

OkHttp的操作方式如下:

Request request = new Request.Builder()
				.url("http://192.168.73.23:8080/GoodsManagerTest/goodslist.do?page=0")
				.addHeader("cookie", sessionid)
				.build();
		try {
			Response response = okHttpClient.newCall(request).execute();
			System.out.println(response.body().string());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
以上OkHttp的方式跟Http URLConnection方式最終的效果是相同的。只是現在使用OkHttp的人越來越多,可以作為一個參考。

以上所有程式碼親測有效。如果有問題歡迎指正。