gpt4 book ai didi

android - 使用 Volley 在android中获取服务器端 session ID

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:19:34 25 4
gpt4 key购买 nike

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

_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= 的值并且还需要将其发送到 header 中的其他网络服务中。现在我收到的回复如下

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

最佳答案

好吧,您必须使用 Volley 库提供的 parseNetworkResponse 方法,从那里您可以在 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));
}
}

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

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

希望对您有所帮助。

关于android - 使用 Volley 在android中获取服务器端 session ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36496428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com