쿠키를 사용하여 Android 앱에서 내 세션을 유지하려고하지만 내 서버에서 예상되는 응답을받지 못하기 때문에 잘못된 것으로 보입니다.쿠키가없는 HttpContext
처음에는 예상대로 실행되고 예상되는 모든 데이터를 반환하는 로그인 루틴이 있습니다.
내 로그인 요청 :가
HttpContext httpContext = new BasicHttpContext();
HttpResponse response;
HttpClient client = new DefaultHttpClient();
String url = context.getString(R.string.url_login);
HttpPost connection = new HttpPost(url);
connection.setHeader("Content-Type","application/x-www-form-urlencoded");
List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(2);
nameValuePair.add(new BasicNameValuePair(PARAM_LOGIN,params[0]));
nameValuePair.add(new BasicNameValuePair(PARAM_PASSWORD,params[1]));
connection.setEntity(new UrlEncodedFormEntity(nameValuePair,"UTF-8"));
response = client.execute(connection,httpContext);
data = EntityUtils.toString(response.getEntity());
내 응답을 한 후 난 그냥 데이터로 필요하고 상황이 일부 하락하기 시작 무엇도합니다. 왜냐하면 내 쿠키가 HttpContext에 제대로 저장되었는지 테스트하기 위해 동일한 AsyncTask에서 내 서버를 호출하려고하기 때문입니다.
httpPost.addHeader(context.getString(R.string.domain),PHPSESSID+"="+cookieID+";");
:이 테스트는 내 HttpPost 헤더에 내 쿠키 값을 추가 테스트 실패 이후
HttpPost httpPost = new HttpPost(context.getString(R.string.url_cookie_test));
HttpResponse response = client.execute(httpPost, httpContext);
:
는 처음에 난 그냥 내 현재 HttpContext를 재사용, 변경없이 내 URL을 호출했습니다
CookieStore cookieStore = new BasicCookieStore();
BasicClientCookie cookie = new BasicClientCookie(PHPSESSID, cookieID);
cookieStore.addCookie(cookie);
HttpContext localContext = new BasicHttpContext();
localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
HttpResponse response;
HttpClient client = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(context.getString(R.string.url_cookie_test));
response = client.execute(connection,localContext);
:
는 다음 나는 COOKIE_STORE을 새로운으로 HttpContext를 생성하고 강제로 시도 모두가 실패하고 난 이미 내가 처음 내 로그인 응답을받을 때 내가 아래에 볼 수있는 쿠키에서 예상되는 데이터를 가지고 있음을 확인했습니다 이미에 StackOverflow에 검색 한
List<Cookie> cookies = ((AbstractHttpClient) client).getCookieStore().getCookies();
for (Cookie cookie: cookies){
Log.i("Cookie Value",cookie.toString());
/*
Prints:[[version: 0][name: PHPSESSID][value: 2ebbr87lsd9077m79n842hdgl3][domain: mydomain.org][path: /][expiry: null]]
*/
}
을하고 난을 발견했습니다 정말 나를 위해 일하지 않는 솔루션의 톤, 내가 이미 해봤 모든 솔루션을 공유합니다 :
Android: Using Cookies in HTTP Post request
Sending cookie with http post android
Apache HttpClient 4.0.3 - how do I set cookie with sessionID for POST request
헤더를 httpPost.setHeader ("key", "value") 대신 addOf addHeader로 추가하지 않으시겠습니까? 나는이 변화로 몇 가지 문제를 해결했고, 많은 시간을 잃어 버렸다 ... 문제가 있는지 나는 알지 못한다. 그러나 나는 증명할 가치가 있다고 생각한다. –
제안을 주셔서 감사 드리며, 나는 계속 시험하고있다. 동일한 응답 (쿠키를 사용할 수 없음). – GhostDerfel
나는 당신에게 좋은 코드 조각이 있다고 생각한다. 쿠키를 사용하여 안드로이드를 Spring mvc 서버에 연결하기위한 것이지만 아마도 tgat가 도움이 될 것입니다. 나는 너와 나누지 않아도 돼. 그것은 당신의 대답이 아니지만, 당신을 도울 수 있습니다 :).나는 그것과 함께 나중에 가겠다. –