2016-01-01 67 views
3

我正在開發一個與服務器交談並具有登錄屏幕的應用程序。我使用httpconnection與服務器通信(服務器發回Json響應)。我的登錄屏幕發送電子郵件和密碼,這是由服務器驗證 - 發送cookie,並期待與每個進一步的請求知道該用戶登錄的cookie。CookieManager在關閉應用程序時丟失了Cookie嗎?

我使用Cookiemanager和cookie處理程序來啓用會話該用戶只能登錄一次。

使用下面在我的主要活動2個命令(上創建方法)

CookieManager cookieManager = new CookieManager(); 
CookieHandler.setDefault(cookieManager); 

工作模式是,我的主要活動將讀取命令發送至服務器,該服務器檢查用戶是否已登錄與否(預期cookie中帶有id),並在json中發送狀態。如果狀態爲0,則會移至登錄活動,否則會移至主屏幕。

在登錄活動中,我發送帶有用戶名和密碼的登錄命令,並且服務器通過json響應發送一個cookie(發送一個唯一的id,它將對任何進一步的請求進行交叉檢查以驗證用戶)。

登錄後,我移動到主屏幕並閱讀狀態,並且由於我在主活動中創建了CookieManager,它會自動向每個httprequest發送cookie。

問題是 - 當我退出應用程序並在登錄後回來..它再次從主要活動開始,轉到登錄屏幕而不是主屏幕。我無法弄清楚爲什麼會出現這種情況,以及如何讓我的用戶登錄一次,之後,即使他退出應用程序,它仍然保留cookie。

我認爲即使退出後,CookieManager仍會保留cookie。是否因爲我在創建方法中創建Cookie管理器對象,並且當應用程序退出並重新啓動時會再次創建新對象?或者我的假設是錯誤的。

回答

1

默認情況下new CookieManager()將在存儲器中存儲Cookie

但是,您可以使用不同的構造函數來更改此行爲: CookieManager(CookieStore store, CookiePolicy cookiePolicy)

至少有幾個執着java.net.CookieStore實現:

+0

感謝您的答覆!所以,默認情況下使用CookieManager,當應用程序關閉或死亡時,如果存儲在內存中,將無法檢索cookie? –

+0

是的,當應用程序進程退出時,Cookie在存儲器Cookie存儲中使用時消失 – miensol

0
If I move the Cookiemanager to the application class, it's just get called once and solve this issue. 

public class application extends Application { 
    private static Context context; 
    @Override 
    public void onCreate() { 
     super.onCreate(); 
      CookieManager cookieManager = new CookieManager(); 
      CookieHandler.setDefault(cookieManager); 
    } 

    public static Context getContext() { 
     return application.context; 
    } 
相關問題