2012-11-08 121 views
2

我用最簡單的方法來保持會話,這是工作時:維護會話與Web服務器

只需創建1 HttpClient的,並用它爲每一個服務器的呼叫,它會自動處理cookie等,

但是,這裏的問題是,當我關閉應用程序時,HttpClient對象正在銷燬,因爲預期,因此我無法登錄。

所以我固定它,像這樣:

存儲用戶的電子郵件和共享偏好密碼,每次啓動應用程序時做出的登錄功能(這將創建一個新的會話)的調用和使用相同的HttpClient。

這裏的問題是,Web服務器中的每個會話都有3年的期限。在我創建會話的時候(因爲我每次用戶啓動應用程序時都會調用登錄),每次用戶啓動應用程序。這會導致會話重複或在服務器端創建不必要的會話。

我在做正確的方法嗎?我該如何解決這個問題?

謝謝你

+0

有沒有辦法關閉服務器上的會話?每當您的應用程序關閉時,您都可以這樣做,或者如果您有權訪問服務器,則可以更改服務器的到期時間。 – Techwolf

+0

你的意思是說,當應用程序關閉時,我必須註銷? –

+0

除非您的應用程序需要在後臺運行(例如GPS跟蹤),否則最簡單的方法是在應用程序關閉時註銷並在打開時登錄。如果需要,您可以自動執行此操作,以免影響用戶。 – Techwolf

回答

0

只是實現你自己的CookieStore。這很簡單:擴展BasicCookieStore,實例化它並將它傳遞給HttpContext。你可以將它存儲在一個sqlite數據庫中,或者甚至只是將它轉儲到一個xml文件(但sqlite更輕)。我在這裏工作,但我現在沒有時間清理代碼。

+0

你可以提供一個鏈接或一些代碼在這個。 –

0

除非您的應用程序需要在後臺運行(例如GPS跟蹤),否則最簡單的方法是在應用程序關閉時註銷並在打開時登錄。如果需要,您可以自動執行此操作,以免影響用戶。您仍然可以使用SharedPreferences作爲用戶電子郵件和密碼,只需在應用程序啓動時自動登錄並在應用程序關閉時退出。另一種解決方案是降低服務器端的超時時間,但這取決於您是否可以更改服務器設置或是否需要以此方式設置服務器端設置。