2016-04-08 24 views
5

Sono nuovo di Android e creazione di un'app che comunica al server attraverso il servizio web. Il codice lato server è scritto in asp.net e il lato server sta mantenendo la sessione. Sto usando Volley per chiamare il servizio web ma il problema non sono in grado di mantenere la sessione sul lato server, per quanto ne so devo ottenere l'ID di sessione dall'intestazione che ho cercato su questo lotto sito web ma non sono in grado di avere successo. Il mio problema è di mantenere la sessione in tutta l'app. Di seguito è riportato il mio codice per chiamare il servizio web in Android.ottenere l'id di sessione lato server in Android utilizzando volley

_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); 

e la risposta nell'intestazione è inferiore.

{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} 

ho bisogno valore ASP.NET_SessionId = e anche bisogno di inviare questo in altri servizi web nell'intestazione. In questo momento la risposta che sto ricevendo è al di sotto

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

risposta

7

ben Devi usare parseNetworkResponse metodo fornito da Volley Biblioteca da lì si può ottenere la risposta proveniente server di modulo nell'intestazione.

@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)); 
      } 
     } 

quando si sarà chiamare qualsiasi altro servizio web che appena messo sessionId nell'intestazione come qui di seguito

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

ricordare è necessario inviare ASP.NET_SessionId = obzjppign5twglksjesm24wi come un valore e una chiave Cookie

Sperare che possa essere d'aiuto.

+0

mi hai salvato la vita! Grazie ... – Bhuro

+0

Questo è quello che ho usato http://stackoverflow.com/questions/5960832/maintaining-session-in-android-application-stay-authenticated-on-the-server-si/38473193#38473193 – Bhuro