2016-05-19 22 views
0

直截了當,我創建了一個簡單的登錄與谷歌的凌空。 一旦用戶登錄,我需要跟蹤cookie以便讓他執行一些操作。 我設置的cookie使用此項功能:Android排除保持用戶使用cookie登錄

private boolean setUpCookies(){ 

    boolean ris; 

    cookieManager = new CookieManager(new PersistentCookieStore(getApplicationContext()), CookiePolicy.ACCEPT_ALL); 
    CookieHandler.setDefault(cookieManager); 

    SharedPreferences preferences = getSharedPreferences(PersistentCookieStore.class.getName(), MODE_PRIVATE); 
    String session_cookie = preferences.getString("session_cookie",null); 

    if(session_cookie != null && !session_cookie.isEmpty()){ 

     Log.d(TAG,session_cookie); 
     ris = true; 

    }else{ 

     ris = false; 
    } 

    return ris; 

} 

哪裏PersistentCookieStore是這樣的:source在我的凌空

然後onResponse我有這樣的:

 @Override 
     public void onResponse(String response) { 
      JsonParser parser = new JsonParser(); 
      JsonElement element = parser.parse(response); 

      if (element.isJsonArray()) { 
       try{ 

        JsonArray array = element.getAsJsonArray(); 
        JsonObject tmp = array.get(0).getAsJsonObject(); 

        if(setUpCookies()){ 

         Toast.makeText(getApplicationContext(), "Login OK", Toast.LENGTH_LONG).show(); 

         Intent myIntent = new Intent(MainActivity.this, PostLogin.class); 
         startActivity(myIntent); 

        }else{ 

         Toast.makeText(getApplicationContext(), "Could not set up cookies!", Toast.LENGTH_LONG).show(); 
        } 


       }catch (Exception e){ 
        VolleyLog.d(e.getMessage()); 
       } 

      } else if (element.isJsonObject()) { 

       JsonObject object = element.getAsJsonObject(); 
       Toast.makeText(getApplicationContext(), "Error! " + object.get("error").getAsString(), Toast.LENGTH_LONG).show(); 

      } 
      showProgress(false); 
     } 

既然不能編輯服務器PHP頁面,我不知道我是否正確地做這件事,因爲如果我在模擬器中啓動應用程序,然後我登錄並獲得OK響應,然後通過Android設備監視器刪除該偏好我仍然可以做東西,即使餅乾a不要設置! 希望我能解釋一下自己。

+0

您是否嘗試將會話Cookie存儲在應用程序中,就像我們通常所做的那樣在網頁瀏覽器中保存用戶會話? – Omkar

+0

是的,我正在開發一個應用程序,將不會使用單個Web瀏覽器 – Vesco

回答

0

由:

cookieManager = new CookieManager(new PersistentCookieStore(getApplicationContext()), CookiePolicy.ACCEPT_ALL); 
CookieHandler.setDefault(cookieManager); 

你初始化的CookieStore,這是首選項是隻讀唯一的一次。每次通話都將使用內存中的cookies,因此會話將被保留。如果刪除了首選項,並希望應用更改,您可以:

  • 強行停止和啓動應用程序再次
  • 重新初始化並設置PersistentCookieStore

,你也可以只用public boolean remove(URI uri, HttpCookie cookie)public boolean removeAll()這將刪除內存中的cookies,但保持會話一個在首選項中,因爲此實現(PersistentCookieStore)在同步時不同步刪除