5

Android アプリケーションで DefaultHttpClient のシングルトン インスタンスを使用しているため、ログイン後に Web サイトとのセッションが複数のアクティビティで認証されたままになります。

これは、DefaultHttpClient のシングルトン クラスです。

public class Client {
  private static DefaultHttpClient instance = null;
  //handler for current response in UI thread after receiving it in AsyncTask
  private static HttpResponse currentResponse = null;

  //I also tried this without "synchronized"
  public synchronized static DefaultHttpClient getInstance()
  {
  if(instance == null)
    {
      instance = new DefaultHttpClient();
    }
    return instance;
  }
  public static void setCurrentResponse(HttpResponse response)
  {
    currentResponse = response;
  }
  public static HttpResponse getCurrentResponse()
  {
    return currentResponse;
  }
}

Client.getInstance() を使用して、AsyncTask で使用されるたびにクライアントを呼び出します。

私が試してみました:

ClientInstance = Client.getInstance();
Client.setCurrentResponse(ClientInstance.execute(HttpPost to execute));

私が試してみました:

Client.setCurrentResponse(Client.getInstance().execute(HttpPost to execute));

そして、検索で見つけた他の多くの方法があります。

同じ結果が得られる CookeStore と HttpContext も使用してみました。

応答からエンティティを取得するときに、エンティティで consumerContent() を使用しても、問題は解決しません。

私が見つけたものはすべて、DefaultHttpClient のシングルトン インスタンスを使用するとセッションを維持できると言われていますが、投稿を実行して Web サイトでユーザーのログインが必要なアクションを実行するたびに、返される応答本文に「user_id」セッション変数が設定されていないことを示すエラー (したがって、ユーザーはログインしていません)。Google と Stack Overflow を徹底的に検索しましたが、役に立ちませんでした。誰かが私が間違っていることを指摘できますか?

4

1 に答える 1

6

質問してすみません。

ほとんど正気を失った後、私は自分の php コードをもう一度見直しました。問題は私の Web ページにあることが判明しました。モバイル HttpPost を受信するときに、php が session_start() を呼び出すことを許可していませんでした。私の質問/回答が他の誰かを助けるかもしれません。

于 2012-10-26T21:39:18.333 に答える