【问题标题】:get server side session id in android using volley使用 volley 在 android 中获取服务器端会话 id
【发布时间】:2016-07-29 12:43:11
【问题描述】:

我是 android 新手,正在创建一个通过 web 服务与服务器通信的应用程序。服务端代码是用asp.net写的,服务端在维护Session。 我正在使用 Volley 调用网络服务,但问题是我无法在服务器端维护会话,据我所知,我必须从我拥有的标头中获取会话 ID在此网站上搜索分配,但我无法成功。我的问题是在整个应用程序中保持会话。下面是我在android中调用web-service的代码。

_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 服务中发送此值。 现在我收到的回复如下

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

【问题讨论】:

    标签: android session android-volley


    【解决方案1】:

    你必须使用 Volley Library 提供的 parseNetworkResponse 方法,从那里你可以在标头中获取来自服务器的响应。

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

    当您调用任何其他网络服务时,只需将该 sessionId 放在标题中,如下所示

    @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 作为值和键 Cookie

    希望这会有所帮助。

    【讨论】:

    猜你喜欢
    • 2015-08-04
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-23
    • 2017-05-21
    • 1970-01-01
    • 2012-09-14
    相关资源
    最近更新 更多