안녕하세요.
전에 드렸던 질문이 해결이 안되서 다시 코드까지 동반하여 글을 남깁니다.
전에 올렸던 글은 http://www.androidpub.com/1686773 입니다.
서버는 아파치 서버로 PHP의 HTML을 가져와 파싱하는 것으로 하고 있습니다.
1번 액티비티(mainLogin.java)에서 로그인 요청을 하고 쿠키를 굽습니다.
서버에 요청하고 응답받고 쿠키를 굽는 것을 아래와 같이 했습니다.
그런데 쿠키를 구울 때 사용자들 마다 굽는게 다르더라구요.
domain과 value 또는 name과 value 어떤 내용을 구워야 하나요??
DefaultHttpClient client = new DefaultHttpClient();
CookieStore cookieStore = new BasicCookieStore();
HttpPost request = new HttpPost(loginAddress);
Vector<NameValuePair> nameValue = new Vector<NameValuePair>();
nameValue.add(new BasicNameValuePair("username", userId));
nameValue.add(new BasicNameValuePair("password", userPassword));
request.setEntity(new UrlEncodedFormEntity(nameValue, "UTF-8"));
HttpResponse response = client.execute(request);
htmlInputStream = response.getEntity().getContent();
List<Cookie> cookies = ((DefaultHttpClient)client).getCookieStore().getCookies();
if(!cookies.isEmpty())
{
CookieManager cookieManager = CookieManager.getInstance();
CookieSyncManager.createInstance(getApplicationContext());
cookieManager.setAcceptCookie(true);
for(int i = 0; i < cookies.size(); i++)
{
// String cookieString = cookies.get(i).getDomain() + "=" + cookies.get(i).getValue();
// String cookieString = cookies.get(i).getName() + "=" + cookies.get(i).getValue();
String cookieString = cookies.get(i).getName() + "=" + cookies.get(i).getValue() + "; path=" + cookies.get(i).getPath();
// cookieManager.setCookie(cookies.get(i).getName(), cookies.get(i).getValue());
// cookieManager.setCookie(loginAddress, cookieString);
cookieManager.setCookie(cookies.get(i).getDomain(), cookies.get(i).getValue());
}
CookieSyncManager.getInstance().startSync();
}
로그를 이용해 쿠키를 확인하면 아래와 같이 쿠키가 만들어 집니다.
[version: 0][name: SessionTest][value: W7HanAOglj][domain: xxx.xxx.xxx.xxx][path: /][expiry: null]
[version: 0][name: Session][value: gq315lb7r73cn7a904a1k9n4l1][domain: xxx.xxx.xxx.xxx][path: /][expiry: null]
[version: 0][name: SESSIONID_][value: %25E2%25C8%2513E%25BD][domain: xxx.xxx.xxx.xxx][path: /][expiry: Mon Oct 10 00:20:37 Asia/Seoul 2011]
로그인에 성공을 하면 Intent를 이용해서 다른 액티비티로 화면 전환이 이루어 집니다.
Intent intent = new Intent(mainLogin.this, userInfo.class); startActivity(intent);
화면 전환이 이루어진 2번 액티비티(userInfo.java)에서 다시 서버로 다른 정보를 요청합니다.
코드는 아래와 같습니다.
앞의 액티비티(mainLogin.java)에서 만들어진 쿠키를 어떻게 가져와야하나요?
(BasicClientCookie cookie1 = new BasicClientCookie("(cookieName)", cookieValue); 부분입니다.)
그리고 다른 소스들 보니까
CookieSyncManager.getInstance().Sync(); 을 이용해서 쿠키를 연결한다는데
화면 전환된 액티비티(userInfo.java)에 위의 코드를 어디다 적어야하나요?
DefaultHttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet( url );
CookieStore cookieStore = new BasicCookieStore();
BasicClientCookie cookie1 = new BasicClientCookie("(cookieName)", cookieValue);
cookie1.setVersion(0);
cookie1.setDomain(domain);
cookie1.setPath("/");
cookieStore.addCookie(cookie1);
BasicClientCookie cookie1 = new BasicClientCookie("(cookieName)", cookieValue);
cookie1.setVersion(0);
cookie1.setDomain(domain);
cookie1.setPath("/");
cookieStore.addCookie(cookie1);
BasicClientCookie cookie1 = new BasicClientCookie("(cookieName)", cookieValue);
cookie1.setVersion(0);
cookie1.setDomain(domain);
cookie1.setPath("/");
cookieStore.addCookie(cookie1);
client.setCookieStore(cookieStore);
HttpContext context = new BasicHttpContext();
context.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
HttpResponse response = client.execute(request, context);
계속 응답으로 돌아오는 것은 로그인하라는 페이지의 값입니다.
위에 같이 하는게 맞는건가요?
CookieManager, CookieSyncManager, CookieStore를 사용하라는 것은 알겠는데
적용하는 방법을 몰라서요.
자료를 찾아보면 저와 같은 고민하시는 분도 몇분 계신거 같은데 거기에도
확실한 답변은 없어서요.
여기서 포기할 수 없어서요.
답변 부탁드립니다.




CookieSyncManager.createInstance(this);
cookieManager = CookieManager.getInstance();
형식으로 가져오게되면 어떤 엑티비티에서건 .setCookie() 를 사용한후 같은 값을 가져옵니다.
전 상기 형식으로 쿠키를 통한 자동로그인 구성을 사용한경우가 있습니다.
전 로그인 앱 페이지에서 전에 적으신글처럼 post를 통한 리턴값에 true false를 받아 true의 경우 .setCookie를 통하여 해당쿠키를 굽고
웹뷰가 있는 페이지나 웹뷰가 존제하지 않는 메인페이지에서 쿠키를 통한 로그인페이지 이동 유무를 처리합니다.
public CookieManager cookieManager;
가져오기 및 싱크..
보시면 this가 해당Activity와 동기화 시키는 부분입니다.
CookieSyncManager.createInstance(this);
cookieManager = CookieManager.getInstance();
굽기
public void setSyncCookie() {
String domain = getString(R.string.domain);
List<Cookie> cookies = ((DefaultHttpClient)httpclient).getCookieStore().getCookies();
Log.e("cookie", "setSyncCookie start");
if (!cookies.isEmpty()) {
for (int i = 0; i < cookies.size(); i++) {
String cookieString = cookies.get(i).getName() + "="+ cookies.get(i).getValue();
cookieManager.setCookie(domain, cookieString);
Log.e("cookie test : ", cookieString);
}
}
}
체크시 아래 형식으로.. 삭제..
if (cookieManager != null) {
cookieManager.removeAllCookie();
}