다른 활동에서 동일한 HttpClient 인스턴스를 사용하려고했지만 작동하지 않았습니다. 그래서 한 번의 활동을 시도하고 HttpClient를 사용하여 로그인 한 다음 로그인이 성공하면 로그 아웃하기로 결정했습니다. 이것은 모두 동일한 활동에 있으므로 HttpClient는 세션을 정확하게 유지해야합니다.안드로이드의 HttpClient가 세션을 유지하지 않음
HttpClient client = new DefaultHttpClient();
ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();
postParameters.add(new BasicNameValuePair(UN_ID, username));
postParameters.add(new BasicNameValuePair(PW_ID, password));
HttpPost request = new HttpPost(URL);
formEntity = new UrlEncodedFormEntity(postParameters);
request.setEntity(formEntity);
response = client.execute(request);
응답이 내가 로그 아웃을 시도, 성공적인 로그 인 경우 : 이것은이 응답 "에 기록되지"를 반환
if (responseCode.equals("101")){ //successful
HttpGet g = new HttpGet("https://site.com/file.php?logout=1");
HttpResponse r = client.execute(g);
가. 이 문제가 서버, HttpClient 또는 내 코드에 문제가 있습니까?
편집 : Eric의 답변에 대한 응답입니다.
이미 쿠키이 시도했다 : 쿠키는 기본적으로 활성화되지 않기 때문이다
response = client.execute(request, httpContext);
HttpResponse r = client.execute(g, httpContext);
합니까의 서버 구현에 문제가 온 것처럼
이 보이는 (주석 참조)이 질문에 설명 된대로있는 HttpContext를 사용할 필요가 서버가 https 대신 http 모드에 응답하므로 https 관리에서 오는 문제점을 배제 할 수 있습니까? 또한, 예를 들어 curl을 사용하여 성공적으로 세션을 시뮬레이션 했습니까? 그렇다면 서버가 제대로 작동하는지 확인할 수 있습니까? – EricLarch
HTTP가 도움이되지 않았습니다. 필자는 Fiddler를 사용하여 내 http 요청을 작성했습니다. 이 방법으로 로그인 할 수는 있지만 그 이후에는 아무 것도 할 수 없습니다. 왜냐하면 "로그인하지 않았습니다"라는 응답이 나오기 때문입니다. URL은 모바일 버전입니다. 필자는 Fiddler를 사용하여 모바일 사이트가 아닌 기본 사이트에서 요청을 생성 할 수 있습니다. 로그인 할 때만 사용할 수있는 페이지로 이동할 수 있습니다. 이것이 모바일 웹 사이트의 PHP가 세션을 올바르게 유지하지 못하는 이유입니다. PHP에 대한 액세스 권한이 없지만 문제가 될 수 있다고 생각되는 사람에게 요청할 수 있습니다. – Ryan
그러면 모바일이 아닌 URL을 사용해보세요. Android 코드가 올바른지 알 수 있습니다. 기본 URL을 사용하여 코드를 통해 비공개 페이지에 액세스 할 수있는 경우 모바일 버전에서 문제가 발생했는지 확인할 수 있습니다. – EricLarch