24

Android セッション管理用の特定のライブラリはありますか? 通常の Android アプリでセッションを管理する必要があります。ありませんWebView。post メソッドからセッションを設定できます。しかし、別のリクエストを送信すると、そのセッションが失われます。誰かがこの問題で私を助けることができますか?

DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("My url");

HttpResponse response = httpClient.execute(httppost);
List<Cookie> cookies = httpClient.getCookieStore().getCookies();

if (cookies.isEmpty()) {
    System.out.println("None");
} else {
    for (int i = 0; i < cookies.size(); i++) {
        System.out.println("- " + cookies.get(i).toString());
    }
}

セッションが失われた同じホストにアクセスしようとすると、次のようになります。

HttpGet httpGet = new HttpGet("my url 2");
HttpResponse response = httpClient.execute(httpGet);

ログインページのレスポンスボディを取得します。

4

4 に答える 4

39

これはAndroidとは何の関係もありません。これは、HTTPアクセスに使用しているライブラリであるApacheHttpClientと関係があります。

セッションCookieはDefaultHttpClientオブジェクトに保存されます。DefaultHttpClientリクエストごとに新しいものを作成する代わりに、それを保持して再利用すると、セッションCookieが維持されます。

ここでApacheHttpClientについて読み、ここでHttpClientのCookie管理について読むことができます

于 2010-11-19T12:37:11.253 に答える
4

これは私が投稿に使用するものです。上記のコードを使用してログインスクリプトから抽出されたセッションIDである、httpClientsこのメソッドでnewを使用できます。phpsessidPHP

ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();

nameValuePairs.add(new BasicNameValuePair("PHPSESSID",phpsessid));
于 2010-11-19T15:46:47.727 に答える
3

一般に、Java HttpURLConnection では、この方法で Cookie を設定/取得できます (接続プロセス全体を次に示します)。以下のコードは、すべての接続アクティビティ クラスが継承する、ConnectingThread の run() にあります。すべてのリクエストで送信される共通の静的 sCookie 文字列をすべて共有します。したがって、ログオン/オフのような一般的な状態を維持できます。

        HttpURLConnection conn = (HttpURLConnection) url.openConnection();             

        //set cookie. sCookie is my static cookie string
        if(sCookie!=null && sCookie.length()>0){
            conn.setRequestProperty("Cookie", sCookie);                  
        }

        // Send data
        OutputStream os = conn.getOutputStream(); 
        os.write(mData.getBytes());
        os.flush();
        os.close(); 

        // Get the response!
        int httpResponseCode = conn.getResponseCode();         
        if (httpResponseCode != HttpURLConnection.HTTP_OK){
           throw new Exception("HTTP response code: "+httpResponseCode); 
        }

        // Get the data and pass them to the XML parser
        InputStream inputStream = conn.getInputStream();                
        Xml.parse(inputStream, Xml.Encoding.UTF_8, mSaxHandler);                
        inputStream.close();

        //Get the cookie
        String cookie = conn.getHeaderField("set-cookie");
        if(cookie!=null && cookie.length()>0){
            sCookie = cookie;              
        }

        /*   many cookies handling:                  
        String responseHeaderName = null;
        for (int i=1; (responseHeaderName = conn.getHeaderFieldKey(i))!=null; i++) {
            if (responseHeaderName.equals("Set-Cookie")) {                  
            String cookie = conn.getHeaderField(i);   
            }
        }*/                

        conn.disconnect();                
于 2011-02-24T09:44:43.947 に答える