Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-Volley库:SSL生产环境中的会话过期问题_Android_Ssl_Android Volley_Session Cookies_Request Headers - Fatal编程技术网

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

Android-Volley库:SSL生产环境中的会话过期问题,android,ssl,android-volley,session-cookies,request-headers,Android,Ssl,Android Volley,Session Cookies,Request Headers,我有两个页面:第一个是登录页面,第二个是分类页面。在登录API中,输入凭据后,我将从响应头中获得作为sessession id的响应。 session id将被保存,并将用于进一步的API调用。我正在尝试调用第二个API(分类页面)。在此页面中,作为输入,am将保存的会话id传递到请求头中。获取响应为“会话已过期”。还尝试在请求头中传递Set Cookie:PHPSESSID=d9f9sdkfjs9。但它不起作用 注意: 我仅在生产环境中遇到此问题(包括SSL) 我正在使用volley库来处理A

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

注意:

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

  • public void fnCallLoginAPI(){
    试一试{
    //演示URL
    //最终字符串URL=”http://demo.io/api/api.php?m=login";
    //实时网址
    最终字符串URL=”https://www.live.com/shop/api/api.php?m=login";
    最后一个字符串requestBody=“email=abc。b@xyz.com“+”&password=43443==“+”&strPlatform=i“+”&strDeviceToken=null”;
    StringRequest StringRequest=new StringRequest(Request.Method.POST,URL,new Response.Listener()){
    @凌驾
    公共void onResponse(字符串响应){
    字符串strResponse=响应;
    System.out.println(“配置文件中的响应为”+响应);
    }
    },
    新的Response.ErrorListener(){
    @凌驾
    公共无效onErrorResponse(截击错误){
    }
    })
    {
    @凌驾
    公共映射getHeaders()引发AuthFailureError{
    Map headers=newhashmap();
    headers.put(“Cookie”、“PHPSESSID=“+sessionID”);
    返回标题;
    }
    @凌驾
    公共字节[]getBody()抛出AuthFailureError{
    字节[]正文=新字节[0];
    试一试{
    System.out.println(“最需要的主体是”+请求主体);
    body=requestBody.getBytes(“UTF-8”);
    }捕获(不支持的编码异常e){
    e(“TAG”,“无法从JSON获取字节”,e.fillInStackTrace());
    }
    返回体;
    }
    };
    AppApplication.getInstance().addToRequestQueue(stringRequest,“赋值”);
    }捕获(例外e){
    }
    }
    公共无效fnCallCateGoryAPI(){
    请尝试{最终字符串URL=”https://www.live.com/shop/api/api.php?m=getcategories"; 
    StringRequest StringRequest=new StringRequest(Request.Method.POST,URL,new Response.Listener()){
    @凌驾
    公共void onResponse(字符串响应){
    字符串strResponse=响应;
    System.out.println(“配置文件中的响应为”+响应);
    JSONObject jsonObj=null;
    试一试{
    jsonObj=新的JSONObject(strResponse);
    sessionID=jsonObj.optString(“session_id”);
    系统输出打印(“sessionID”+sessionID);
    }捕获(JSONException e){
    e、 printStackTrace();
    }
    }
    },
    新的Response.ErrorListener(){
    @凌驾
    公共无效onErrorResponse(截击错误){
    }
    })
    {
    };
    AppApplication.getInstance().addToRequestQueue(stringRequest,“赋值”);
    }捕获(例外e){}
    }}
    
    @fazil在从后端增加令牌过期时间后重试

    @fazil:我在我的项目中也遇到了类似的情况,我理解的原因实际上是由于在同一个键“set Cookie”下设置了多个头值

    请在您的日志中检查这一点

    另外,确保在请求中正确设置了头(检查服务器的请求和响应日志)

    如果所实现的一切都是正确的,并且问题是由于同一标题中的多个值引起的,则需要检查此volley的实现:

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