일단 안되는 부분은 없는데, LAMP 환경이고요,
브라우저에서 웹으로 접속하면,
리눅스에서는 세션 파일이 하나만 생성 됩니다.
만약 로그인 안한 상태에서 접속하면
빈 세션 파일이 생성되고
다시 로그인을 하고 접속하게 되면
그 빈세션 파일에 세션값이 들어가기 때문에
결론적으로는 하나의 세션만 생성됩니다.
그런데 안드로이드 HTTPURLConnection 으로 접속하게 되면
로그인을 할때마다 계속 해서 세션 파일을 만들어냅니다.
로그인을 안하고 접속하면, 빈 세션을 만들어내고
로그인을 하면 또다른 세션 파일을 만들어 냅니다.
계속해서 만들어냅니다.
기본적으로 제가 만드는 앱의 로직과는 상관이 없지만
불법적인 접근 부분때문에 이 부분을 컨트롤 해야되는데요
php.ini 에서 가비지 세션 정리하는 것 말고
원초적으로 접속하는 방법이 잘못된걸까요?
다음 소스 헤더 날리는 부분 입니다.
URL urlLogin = new URL("url);
HttpURLConnection httpConn = (HttpURLConnection) urlLogin.openConnection();
httpConn.setDefaultUseCaches(false);
httpConn.setDoInput(true);
httpConn.setDoOutput(true);
httpConn.setUseCaches(false);
httpConn.setInstanceFollowRedirects(false);
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("content-type", "application/x-www-form-urlencoded;charset=utf-8");
httpConn.setRequestProperty("Connection", "keep-alive");
return httpConn;stackoverflow 에 문의해본 결과
CookieHandler 를 사용하지 않은 이유였습니다.
그런데 문제가 CookieManager 와 CookieHandler를 제대로
사용할 수 없는 오류가 있었는데
안드로이드 2.3.3 버젼 이상만 가능합니다.
2.2 는 HttpClient의 CookieStore 인가 뭔가를 고민하셔야될겁니다.
그 증상은 사실 당연한 겁니다..무슨 말이냐면 HttpURLConnection 이란건 웹브라우저가 접속한 것과 같은 겁니다. 즉 웹브라우저를 2개 띄우면 세션도 같이 2개가 뜨는 것과 같은 것이지요..요즘같이 탭 기능이 들어가 있는 경우는 여러탭을 띄워도 세션이 1개만 잡혀 공유가 되지만 탭으로 띄우는게 아닌 새창으로 띄워서 할 경우 세션은 다르게 생성이 됩니다. 이건 과거 IE 6버전때도 그랬죠..
그래서 이 부분을 풀려면 달리 접근해야 합니다. 매번 HttpURLConnection을 생성해서 사용하는게 아니라 클래스 멤버 변수로 static으로 해서 사용하는 겁니다. 싱글턴 패턴으로 객체를 생성하면 딱 1개의 객체만 생성되기때문에 그것만 재활용하는 식으로 하면 웹브라우저의 세션은 하나만 유지가 될껍니다.
사용전에 멤버 변수가 null인지 확인하고 null이면 초기화 작업을 거치고 null이 아니면 이미 생성되었다고 보고 바로 사용하면 됩니다..
CookieManager 가
SDK 버젼에 따라 다르더군요,,,, ㅡ.ㅡ
안드로이드 팀에서 만든것과,
자바쪽 라이브러리 이렇게 2개가 있는데
지금 6시간째 로그만 봤습니다...
허리아파 죽겄습니다...해결이 안됩니다.
java.net.cookiemanaer 에 있는 cookieStore 는 자동으로 헤더 값을 가져오던데
이거는 싱크가 안되더군요...
그래서 헤더는 저걸로 가져오고
아예값 넣는걸 android.webkit.cookiemanager 로 넣으면 바로바로 값은 가져오더군요,
일단 이걸로 해야겠습니다....머리아프네요;;;
java.net.cookiemanager 로는 웹뷰에 (로그인된 상태로) 세션 싱크가 안될까요...
지금 제가 무슨말하는지도 모르겟습니다 새벽 5시가 다되는데 정신이 혼미해지네요
말씀하신 멤버 변수 부분은 안되더군요....
cookiehandler를 어쩔수 없이 이용해야 겠어욤...




httpConn.setUseCaches(false); 이게 문제가 아닐까요... 캐쉬를 해줘야 이전 세션 쿠키값을 남겨두겠죠...