2014-09-23 1 views
4

내 안드로이드 응용 프로그램에서 okhttp로 마이 그 레이션 중이며 로그인 한 사용자가 기본 cookieStore에 PHPSESSID를 수동으로 설정해야 얻을 수 없습니다. 로그 아웃했다. 다음 코드를 사용하여 쿠키를 수동으로 설정하고 있습니다. 내가쿠키를 기본 cookiestore에 수동으로 설정하고 okhttp 요청에 사용

Request request = new Request.Builder().url("http://www.example.com/getdata.php").build(); 
client.newCall(request).execute(); 

쿠키는 사용하여 클라이언트의 호출을 실행하고 때 다시이 코드

((CookieManager)client.getCookieHandler()).getCookieStore().get(new URI("http://www.example.com")); 
그러나

를 사용하여 쿠키를 얻을 수있는 원인

((CookieManager)client.getCookieHandler()).getCookieStore().add(new URI("http://www.example.com"), new HttpCookie("PHPSESSID", getPhpSessionID())); 

쿠키가 설정 될 것으로 보인다 요청에서 전송되지 않습니다 (android proxy를 사용하여이 네트워크 호출을 확인했습니다).

okhttp 클라이언트가 해당 쿠키를 사용하도록 쿠키를 설정하는 올바른 방법은 무엇입니까?

+0

처럼이를 것 나를 도와주지 마라. 결과를 얻었습니까? –

답변

6

CookieHandler '는 CookieManager의의 put 구현과 CookieStoreadd 방법의 차이가있는 것 같다.

기본적으로 CookieManager에서 put을 사용하면 구현시 내부적으로 생성 된 HttpCookie의 도메인과 경로가 추가됩니다. HttpCookie을 만드는 책임자 인 것처럼 CookieStore의 add 메소드를 직접 사용하면 이러한 일이 발생하지 않습니다.

OkHttpget을 사용합니다.이 경우 구현시 CookieManager이되고 CookieStore은 직접 구현되지 않습니다. 또한 getpath을 사용하여 케이스에 누락 된 쿠키와 일치시킵니다.

HttpCookie에 예상 기본 경로 "/"를 입력하지 않으면 쿠키를 찾을 수 없습니다.

그런 다음 수정해야합니다 귀하의 HttpCookie

HttpCookie cookie = new HttpCookie("PHPSESSID", getPhpSessionID()); 
cookie.setPath("/"); 
cookie.setVersion(0); 
cookie.setDomain("www.example.com"); 
((CookieManager)client.getCookieHandler()).getCookieStore().add(new URI("http://www.example.com"), cookie); 

또는 솔루션을 사용하면 CookieStore

에 대한 액세스 권한을 얻는 유일한 대신 인터페이스를 사용할 수는 CookieHandler 구현을 변경할 수있는 가능성이 더 적응할 수 있도록

과 같이

당신은 내가 똑같은 문제와 답 미상이 너무

List<String> values = new ArrayList<>(Arrays.asList("PHPSESSID=" + "your_session_id_here")); 
Map<String, List<String>> cookies = new HashMap<>(); 
cookies.put("Set-Cookie", values); 
client.getCookieHandler().put(new URI("http://www.example.com"), cookies); 
+0

좋습니다. 두 번째 솔루션이 효과를 발휘했습니다. 그러나 첫 번째 것은 없습니다. okhttp는 여전히이 경우 네트워크 요청을 보낼 때 쿠키를 설정하지 않았습니다. – Udbhav

+0

글쎄, 적어도 그들 중 한 명이 잘되어서 다행이다. 나는 왜 첫번째가 너를 위해 아무것도하지 않았는지 궁금하다. –

+0

첫 번째 해결 방법은 도메인에서 "http : //"를 제거하고'cookie.setDomain ("www.example.com");을 ​​추가하여 일반 쿠키 대신 쿠키 : PHPSESSID = fq01rjn8f8jgotrf7egvcf7mu4' 설정 한 값은 입니다. 쿠키 : $ Version = "1"; PHPSESSID = "fq01rjn8f8jgotrf7egvcf7mu4"; $ 경로 = "/"; $ 도메인 = "www.example.com"'. 서버 PHP 파일이이 쿠키를 유효한 세션 ID 쿠키로 식별하지 못했습니다. – Udbhav

관련 문제