天天看點

android端和服務端session保持

為了保持服務端的session,我首先想到的辦法就是沒隔一段時間調用一下我們的伺服器。

之前出了總總問題,什麼timeoutException,ClientProtocolException等等問題,我講慢慢解釋.

我在service中做輪詢調用伺服器保持session時,隻要出現一次timeoutexception,接着就會出現ClientProtocolException,後來發現這是重定向導緻的問題,然後在AsyncHttpClient中設定了

client.setEnableRedirects(false);
client.getHttpClient().getParams().setParameter(ClientPNames.ALLOW_CIRCULAR_REDIRECTS, false);
           

但是這麼一設定又會出一個問題,我在登入的時候總是報302,又回到了重定向的問題。

我發現服務端在給我設定attribute傳遞cookies的時候,使用了重定向。沒辦法,隻能将setEnableRedirects再次打開。

還有一個問題就是在AsyncHttpClient話說是自動儲存CookieStore的,但是我列印了log,結果CookieStore是為null,導緻我在做輪詢的時候,是沒有向服務端送出Cookie的,這樣過了30分鐘服務端的session任然會逾時。

于是手動的加上

CookieStore cookieStore = new PersistentCookieStore(this);
cline.setCookieStore(cookieStore);
           

然後列印log

CookieStore cookieStore = new PersistentCookieStore(this);
		cline.setCookieStore(cookieStore);
		HttpContext httpContext = cline.getHttpContext();
		CookieStore cookies = (CookieStore) httpContext.getAttribute(ClientContext.COOKIE_STORE);
		if(cookies!=null){
			for(Cookie c:cookies.getCookies()){
				LogUtil.d("login activtity onsuccess before ~~"+c.getName(),c.getValue());
			}
		}else{
			LogUtil.d("login activtity onsuccess  before~~","cookies is null");
		}
           

發現這次才有值。

哈哈,明白了吧,你需要在登入的時候手動添加

CookieStore cookieStore = new PersistentCookieStore(this);
		cline.setCookieStore(cookieStore);
           

才可以的。