2016-04-08 8 views
5

Ich bin neu zu Android und Erstellen einer App, die mit dem Server über Web-Service kommunizieren. Server-Side-Code ist in asp.net geschrieben, und Server-Seite verwaltet Sitzung. Ich benutze Volley, um den Web-Service anzurufen, aber das Problem, ich bin nicht in der Lage, die Sitzung auf der Serverseite zu halten, soweit ich weiß, muss ich die Session-ID aus der Kopfzeile Ich habe durchsucht haben Website, aber ich kann nicht erfolgreich sein. Mein Problem besteht darin, die Sitzung in der App zu pflegen. Unten ist mein Code für den Aufruf von Web-Service in Android.Server-Session ID in Android mit 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); 

und die Antwort in der Kopfzeile ist unten.

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

ich brauche Wert von ASP.NET_SessionId = und müssen auch in Kopf dies in anderen Web-Dienste zu senden. Im Augenblick ist die Antwort, die ich empfangen habe ist, unter

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

Antwort

7

gut Sie haben parseNetworkResponse Methode von Volley-Bibliothek nutzen von dort aus können Sie die Antwort bekommen kommenden Formularserver im Header.

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

, wenn Sie einen anderen Web-Service aufrufen wird gerade auf, dass sessionId im Header wie unter

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

Erinnern Sie sich ASP.NET_SessionId = obzjppign5twglksjesm24wi als Wert und Schlüssel senden Cookie

Hoffnung, die helfen wird.

+0

hast du mein Leben gerettet! Danke ... – Bhuro

+0

Dies ist, was ich http://stackoverflow.com/questions/5960832/maintaining-session-in-android-application-stay-authenticated-on-the-server-si/38473193#38473193 verwendet habe – Bhuro