Android - Volley库:SSL生产环境中的会话过期问题

faz*_*zil 5 ssl android request-headers session-cookies android-volley

我有2页:第一页是登录页面,第二页是类别页面.在输入凭据后的登录API中,我从响应头获取响应作为sesssion id.sesssion id将被保存,并将用于进一步的API调用.我正在尝试调用第二个API(类别页面).在此页面中,作为输入传递请求标头中保存的会话ID.获得响应"会话已过期".还尝试传入Set-Cookie: PHPSESSID=d9f9sdkfjs9请求标头.但它不起作用.

注意 :

  1. 我只在生产环境中遇到此问题(包括SSL)
  2. 我正在使用volley库来处理API.


public void fnCallLoginAPI() {
    try {
        //DEMO URL
        //final String URL="http://demo.io/api/api.php?m=login";
        //LIVE URL
        final String URL = "https://www.live.com/shop/api/api.php?m=login";
        final String requestBody = "email=abc.b@xyz.com" + "&password=43443==" + "&strPlatform=i" + "&strDeviceToken=null";
              StringRequest stringRequest = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                String strResponse = response;
                System.out.println("THE RESPONSE IS in PROFILE IS" + response);
                  }
        },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {

                    }
                })
        {
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                Map<String, String> headers = new HashMap<>();
                headers.put("Cookie", "PHPSESSID=" + sessionID);
                return headers;
            }
 @Override
            public byte[] getBody() throws AuthFailureError {
                byte[] body = new byte[0];
                try {
                    System.out.println("THE REQIEST BODY IS" + requestBody);
                    body = requestBody.getBytes("UTF-8");
                } catch (UnsupportedEncodingException e) {
                    Log.e("TAG", "Unable to gets bytes from JSON", e.fillInStackTrace());
                }
                return body;
            }
        };

        AppApplication.getInstance().addToRequestQueue(stringRequest, "assignment");
    } catch (Exception e) {

    }
}


public void fnCallCateGoryAPI(){
try { final String URL ="https://www.live.com/shop/api/api.php?m=getcategories"; 
    StringRequest stringRequest = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            String strResponse = response;
            System.out.println("THE RESPONSE IS in PROFILE IS" + response);
            JSONObject jsonObj = null;
            try {
                jsonObj = new JSONObject(strResponse);
                sessionID = jsonObj.optString("session_id");
                System.out.print("sessionID" + sessionID);
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                }
            })
    {
      };

    AppApplication.getInstance().addToRequestQueue(stringRequest, "assignment");
} catch (Exception e) {}
}}
Run Code Online (Sandbox Code Playgroud)

Dev*_*Dev 0

@fazil 从后端增加令牌过期时间后尝试