2011-05-29 52 views
3

我已經成功地設置了一個登錄到我的drupal網站的Android應用。Drupal Android應用登錄持久性

我的問題是登錄的用戶會話不會持續很長時間。該網站清楚地顯示我的用戶已登錄到該網站,但在一個小時左右,用戶不再在網站上顯示爲活動狀態。 (我猜是因爲我並不完全知道它。)

任何人都可以提供一個洞察,爲什麼發生這種情況?

的代碼如下:

protected HttpResponse doInBackground(Void... params) { 
// TODO Auto-generated method stub 
    HttpClient httpClient = new DefaultHttpClient(); 
    HttpPost httpPost  = new HttpPost("http://mystestsite.com/testpoint/user/login"); 

     // TODO Auto-generated method stub 
     try{ 
      List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
      nameValuePairs.add(new BasicNameValuePair("password", "guest")); 
      nameValuePairs.add(new BasicNameValuePair("username", "guest")); 
      httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

      //Execute HTTP post request 
      response = httpClient.execute(httpPost); 

      Log.i("SEEMS TO WORK", response.toString()); 
      Log.v("CODE", httpPost.getRequestLine().toString() + " - " + response.toString()); 

     }catch(Exception e){ 
      Log.e("HTTP ERROR", e.toString()); 
     } 
return response; 
} 
+0

我認爲這取決於會話cookie是由Drupal設置多長時間。你還應該發佈一些代碼。 – 2011-05-29 11:58:38

+0

嗨盧卡斯Knuth, 我一直在這裏發佈一些代碼,但它只是不會工作 – sisko 2011-05-29 23:22:01

+0

只需將代碼發佈在編輯器字段中,將其標記並按代碼標籤... – 2011-05-30 11:43:15

回答

0

所以,它聽起來就像它與你如何設置你的cookies的問題。當我做這種事情時,我通常只是戳我的http頭,直到他們看起來像從Web瀏覽器發送的頭一樣。問題在於知道Web瀏覽器和Android應用程序正在發送什麼,所以在這裏嘗試一下。

這不一定是您的問題的代碼解決方案,但可能會有所幫助。

使用查爾斯(偉大的工具)http://www.charlesproxy.com/爲此。沒有我與公司沒有任何關係,它只是一個偉大的工具。

Charles有一個叫做反向代理的功能,基本上它允許你通過Charles將流量反彈到你的drupal服務器,並且可以在流入和流出你的應用時檢查它。

使用charles,您可以嗅探來自您的Web瀏覽器的良好請求的樣子,然後您可以嗅探您的Android應用程序的請求是什麼樣的。比較兩者,你可以看到你的應用程序嚴重地改變了請求標題的位置。

調試階段是這樣的:

一旦你得到了查爾斯成立,打你的Drupal服務器幾次,檢查請求/響應,你從瀏覽器中看到的結構。

然後從android應用程序打了幾次你的服務,並注意差異。也許cookie沒有通過,也許它是畸形的,也許還有關於標題的其他內容。這將讓你看到你需要拍攝什麼,以便讓Drupal接受請求。