0

JSONでsessionIDを取得するのに問題があります。JSONは常に新しいsessionIDを返します。応答を要求するためにsessionIDを追加しようとすると、間違ったSessionIDが返されます。開いている場合、または新しいsessionIDを開いている場合は、開いているsessionIDを返し、開いている間は常に同じsessionIDを返す必要があります。

それは私のリクエストクラスです:

public abstract class RequestSender<T> {

    private final String requestUrl;

    DefaultHttpClient httpclient;

    InputStream inputStream;

    public RequestSender(String methodName) {
        this.requestUrl = Settings.URL + methodName;
    }

    public void execute() throws IllegalStateException, IOException {
        httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(requestUrl);
        HttpResponse response = httpclient.execute(httppost);
        HttpEntity entity = response.getEntity();
        inputStream = entity.getContent();
    }

    private String convertResponseToString() throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                inputStream, "UTF8"), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
        inputStream.close();
        return sb.toString();
    }

    protected JSONObject parseToJSON() throws JSONException, IOException {
        return new JSONObject(convertResponseToString());

    }

    public String getRequestUrl() {
        return requestUrl;
    }

    public abstract T getResults() throws JSONException, IOException;

}

誰かが私を助けることができれば私は感謝します:)。

4

2 に答える 2

1

new DefaultHttpClient()問題は解決しました、それは毎回作ることによって引き起こされました。getSessionIdメソッドを呼び出すときに一度だけ作成する必要があります

于 2012-05-31T17:23:38.330 に答える
0

サーバーとの最初の認証(または要求/応答交換)が成功したときに、「LoginSuccessul」jsonメッセージを使用してセッションIDを明示的に送信しました。

私のAndroidアプリは、このセッションIDをシングルトンで保存し、行われるすべてのリクエストには、セッションIDが付随します。

サーバースクリプトは、セッションIDを使用して、認証されたユーザーでセッションが開かれたかどうかを確認します。

サーバー側では、次のスクリプトを使用して、セッションIDに基づいてセッションを再作成します。

<?php
    if($_REQUEST['sessionid'])  //see if client sent a sessionid
        session_id($_REQUEST['sessionid']); //create session on the basis of retreived session id
    session_start(); // start session
?>
于 2012-05-29T14:33:56.547 に答える