2016-04-08 10 views
5

私はアンドロイドが新しく、Webサービスを通じてサーバーと通信するアプリケーションを作成しています。サーバーサイドコードはasp.netで書かれ、サーバーサイドはセッションを維持しています。 Volleyウェブサービスを呼び出すために使用しますが、問題は私がサーバーの側でセッションを維持することができない限り、私はヘッダーからセッションIDを取得する必要があることを知っています。私は成功することができません。 私の問題は、アプリケーション全体でセッションを維持することです。以下は、アンドロイドでWebサービスを呼び出すための私のコードです。ボレーを使用してアンドロイドのサーバーサイドセッションIDを取得

_Login_Webservice = new JsonObjectRequest(Request.Method.GET, 
      _Login_Url, null, new Response.Listener<JSONObject>() { 

     @Override 
     public void onResponse(JSONObject response) { 

      // Log.e(Utils.tag, "response :" + response); 
      User _User; 
      button.setLoadingState(false); 

      try { 
       boolean Success = response.getBoolean("Success"); 

       if (Success == true) { 

        //my code 


       } 

      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 

    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      Log.e("", "exception in Login User Login_Activity: "); 
      Log.e("", "error is : " + error.toString()); 

     } 
    }) { 


     @Override 
     protected Map<String, String> getParams() { 
      Map<String, String> params = new HashMap<String, String>(); 
      return params; 
     } 


    }; 
    // _Login_Webservice.setRetryPolicy(new DefaultRetryPolicy(5000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 
    // Adding request to request queue 
    Volley_Controller.getInstance().addToRequestQueue(_Login_Webservice, 
      Config.VOLEY_TAG); 

ヘッダーのレスポンスは以下のとおりです。

{X-AspNet-Version=4.0.30319, X-Android-Selected-Transport=http/1.1, Vary=Accept-Encoding, Date=Thu, 07 Apr 2016 08:26:23 GMT, X-Android-Received-Millis=1460017311847, Set-Cookie=ASP.NET_SessionId=obzjppign5twglksjesm24wi; path=/; HttpOnly, Content-Type=text/JSON; charset=utf-8, X-Powered-By=ASP.NET, X-Android-Response-Source=NETWORK 200, Server=Microsoft-IIS/7.5, X-Android-Sent-Millis=1460017311678, Cache-Control=private} 

私はASP.NET_SessionId =の値を必要とし、また、ヘッダ内の他のWebサービスでこれを送信する必要があります。 は、今私は受け付けておりますことを応答がうまくあなたがヘッダにフォームサーバーを来て、応答を取得することができ、そこからバレーボールライブラリによって提供さparseNetworkResponseメソッドを使用する必要が

{"Success":false,"Info":"Object reference not set to an instance of an object."} 

答えて

7

を下回っています。あなただけのセッションIDが

@Override 
     public Map<String, String> getHeaders() throws AuthFailureError { 
      HashMap<String, String> headers = new HashMap<String, String>(); 
      headers.put("Cookie",SessionId); 
      return headers; 
     } 

以下のようなヘッダには、値とキーとしてASP.NET_SessionId = obzjppign5twglksjesm24wiを送信する必要が覚えていることを置く他のWebサービスを呼び出します

@Override 
     protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) { 
      try { 

       String jsonString = new String(response.data, 
         HttpHeaderParser.parseCharset(response.headers)); 


       String header_response = String.valueOf(response.headers.values()); 
       int index1 = header_response.indexOf("ASP.NET_SessionId="); 
       int index2 = header_response.indexOf("; path"); 

       Log.e(Utils.tag, "error is : " + index1 + "::" + index2); 

       session_id = header_response.substring(index1, index2); 

       // this is your session id put it in the variable and then you can use it any where you want to 

       return Response.success(new JSONObject(jsonString), 
         HttpHeaderParser.parseCacheHeaders(response)); 

      } catch (UnsupportedEncodingException e) { 
       return Response.error(new ParseError(e)); 
      } catch (JSONException je) { 
       return Response.error(new ParseError(je)); 
      } 
     } 

Cookie

希望すると助かります。

+0

あなたは私の人生を救った!ありがとうございました... – Bhuro

+0

これは私が使ったことですhttp://stackoverflow.com/questions/5960832/maintaining-session-in-android-application-stay-authenticated-on-the-server-si/38473193#38473193 – Bhuro

関連する問題