Android-Volley库:SSL生产环境中的会话过期问题
我有两个页面:第一个是登录页面,第二个是分类页面。在登录API中,输入凭据后,我将从响应头中获得作为sessession id的响应。 session id将被保存,并将用于进一步的API调用。我正在尝试调用第二个API(分类页面)。在此页面中,作为输入,am将保存的会话id传递到请求头中。获取响应为“会话已过期”。还尝试在请求头中传递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
Set Cookie:PHPSESSID=d9f9sdkfjs9
。但它不起作用
注意:
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) {}
}}