Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- C#
- 티스토리 초대장
- jQuery
- java
- encoding
- udp
- 인코딩
- Database
- Android
- HTML
- ipad
- JavaScript
- Eclipse
- iphone
- UIWebView
- ios
- 티스토리 초대
- 메모리
- Tomcat
- 톰켓
- 이클립스
- jsp
- XML
- permgen space
- WebView
- spring
- Memory
- 한글
- MySQL
- Objective C
Archives
- Today
- Total
suroMind
[Android] WebView를 사용할때 HttpClient를 이용한 Session 유지 본문
웹뷰를 이용한 간단한 어플을 하나 만들었는데.. 세션이 안되서 삽질을 많이 했습니다.
구글링을 통해 소스는 많이 있지만 자바코드에서 특정 웹페이지를 호출해서 session.getId() 를 찍어본 결과
호출 할 때 마다 다른 값이 나오더군요..뭐 근데.. 방법은 의외로 간단한 거였더군요.. 어쩌면 당연한 거였다는..
일단은 session.getId() 값이 같은 값이 나와야 합니다.. 이 값이 계속 바뀐다면 아무리 삽질을 한들 안되겠지요..
HttpClient httpclient = new DefaultHttpClient(); 이부분을 멤버변수로 바로 선언해 버립니다...
보통 다른 소스들은 호출할 때 마다 계속 재 생성하는데.. 재생성을 안하니 유지가 됩니다..ㅋ 그리고 JSESSIONID를 쿠키로 구우면 OK...
setSyncCookie() 안에 들어 있는 코드는 구글링을 통해 얻은 소스입니다.. 많이들 보셨을듯..하네요.. 바뀐부분은 List<Cookie> cookies = ((DefaultHttpClient)httpclient).getCookieStore().getCookies();
이부분인데.. HttpClient 는 getCookieStroe 메소드가 없어서 위처럼 형변환 해줬습니다..
쿠키로 구을 때 Log 찍어보시면 token값과 JSESSIONID도 같이 구워집니다..
그리고 CookieSyncManager.getInstance().startSync(); 가 되면
웹뷰와 연동 됩니다.. 이렇게 안하면 웹뷰에서 접속하는 것과 HttpClient에서 접속하는 것이 따로 놀더군요...
응용해 보시길 바랍니다.. 더 좋은 방법이 있다면 조언해주시구요^^
public class AndroidTet extends Activity {
public static WebView webview;
public HttpClient httpclient = new DefaultHttpClient(); //멤버변수로 선언
public CookieManager cookieManager;
public String domain = "http://192.168.0.44";
public void onCreate(Bundle savedInstanceState) {
...
CookieSyncManager.createInstance(this);
cookieManager = CookieManager.getInstance();
CookieSyncManager.getInstance().startSync();
...
setSyncCookie();
...
public void onResume() {
super.onResume();
CookieSyncManager.getInstance().startSync();
}
public void onPause() {
super.onPause();
if (CookieSyncManager.getInstance() != null) {
public HttpClient httpclient = new DefaultHttpClient(); //멤버변수로 선언
public CookieManager cookieManager;
public String domain = "http://192.168.0.44";
public void onCreate(Bundle savedInstanceState) {
...
CookieSyncManager.createInstance(this);
cookieManager = CookieManager.getInstance();
CookieSyncManager.getInstance().startSync();
...
setSyncCookie();
...
public void onResume() {
super.onResume();
CookieSyncManager.getInstance().startSync();
}
public void onPause() {
super.onPause();
if (CookieSyncManager.getInstance() != null) {
CookieSyncManager.getInstance().stopSync();
}
}
protected void onDestroy() {
super.onDestroy();
if (cookieManager != null) {
}
protected void onDestroy() {
super.onDestroy();
if (cookieManager != null) {
cookieManager.removeAllCookie();
}
}
public void setSyncCookie() {
Log.e("surosuro", "token transfer start ---------------------------");
try {
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("token", "TEST");// 넘길 파라메터 값셋팅token=TEST
HttpParams params = new BasicHttpParams();
HttpPost post = new HttpPost(domain+/androidToken.jsp");
post.setParams(params);
HttpResponse response = null;
BasicResponseHandler myHandler = new BasicResponseHandler();
String endResult = null;
try {
post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
try {
response = httpclient.execute(post);
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
endResult = myHandler.handleResponse(response);
} catch (HttpResponseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
List<Cookie> cookies = ((DefaultHttpClient)httpclient).getCookieStore().getCookies();
if (!cookies.isEmpty()) {
for (int i = 0; i < cookies.size(); i++) {
// cookie = cookies.get(i);
String cookieString = cookies.get(i).getName() + "="
+ cookies.get(i).getValue();
Log.e("surosuro", cookieString);
cookieManager.setCookie(domain, cookieString);
}
}
Thread.sleep(500);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
public void setSyncCookie() {
Log.e("surosuro", "token transfer start ---------------------------");
try {
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("token", "TEST");// 넘길 파라메터 값셋팅token=TEST
HttpParams params = new BasicHttpParams();
HttpPost post = new HttpPost(domain+/androidToken.jsp");
post.setParams(params);
HttpResponse response = null;
BasicResponseHandler myHandler = new BasicResponseHandler();
String endResult = null;
try {
post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
try {
response = httpclient.execute(post);
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
endResult = myHandler.handleResponse(response);
} catch (HttpResponseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
List<Cookie> cookies = ((DefaultHttpClient)httpclient).getCookieStore().getCookies();
if (!cookies.isEmpty()) {
for (int i = 0; i < cookies.size(); i++) {
// cookie = cookies.get(i);
String cookieString = cookies.get(i).getName() + "="
+ cookies.get(i).getValue();
Log.e("surosuro", cookieString);
cookieManager.setCookie(domain, cookieString);
}
}
Thread.sleep(500);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
'IT분야 > Android' 카테고리의 다른 글
[Android] Http 요청할때 스크립트가 리턴되어 올때 (2) | 2011.06.29 |
---|---|
[Android] WebView와 EditText 혼용해서 사용할 때 키패드 문제점 (0) | 2011.01.24 |
[Android] WebView 사용 시 Javascript Alert, Confirm 출력 (0) | 2011.01.23 |
[Android] 안드로이드 가로 세로 크기 (0) | 2011.01.23 |
Comments