마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 세션 체크 방법 질문드립니다.

0 추천

위 그림과 같이 웹 및 앱 서버를 구축하고 있는 상태입니다. 

안드로이드에서 로그인 인증을 성공하면 Session.cookies에 세션을 저장하고 각 Activity들은 그 세션 값을 이용하여 앱 서버와 통신을 하게됩니다.

계정으로 로그인 할 때마다 새로운 token 값을 DB에 저장하여 중복 로그인을 방지하고 있습니다. 웹의 경우 소스코드를 통해 세션이 끊겼을 경우의 로직을구현할 수 있지만, 안드로이드의 경우 세션이 끊겼을 경우의 예외처리를 어떤식으로 해야할지 도무지 해결할 수가 없어 질문드립니다.

 

로그인 인증 시 HttpClient를 통해 인증하고 있습니다. 

각 Activity 호출 시마다 Session이 존재하는지 없는지 체크하는 방법을 구현해야할 것 같은데.. 

choHJ (190 포인트) 님이 2015년 3월 6일 질문
choHJ님이 2015년 3월 6일 수정
서버 소스코드에 token 값이 없을 경우 세션을 destroy 하는 로직을 추가하여 체크하려고 해도 HttpClient는 AsyncTask를 통해 동작하기 때문에 체크하는 로직이 AsyncTask 실행과는 별개로 동작합니다.(체크하는 로직이 먼저 실행됨.) AsyncTask의 doInBackground()에서 서버로 통신하여 onPostExecute()에서 response를 처리하도록 되어 있습니다. Activity내에 세션 체크 로직이 존재하여 AsyncTask의 doInBackground()가 끝나고  onPostExecute()로 가기도 전에 세션을 체크한다는게 문제입니다.
[SessionCotrol 클래스]

public class SessionControl {
    static public DefaultHttpClient httpclient = null;
    static public List<Cookie> cookies;   //각 Activity에서 같은 세션을 통신하기 위해 세션을 저장

    public static HttpClient getHttpclient() {
        if( httpclient == null){
            SessionControl.setHttpclient(new DefaultHttpClient());
        }
        return httpclient;
    }
    public static void setHttpclient(DefaultHttpClient httpclient) {
        SessionControl.httpclient = httpclient;
    }
}

앱 서버와의 통신이 필요한 Activity에서는 SessionControl의 HttpClient를 이용하여 통신하기 때문에 각 Activity들은 같은 세션을 사용하고 있습니다.

1개의 답변

0 추천
session 이 끊겼을때 적당한 에러 코드와 함께
리스폰스를 해주세요
가령 401 이라던가 401 이라던가..
그럼 안드로이드 http response 에서
해당 코드를 잡아서 401일때 세션만료 메세지를 띄우거나
재로그인하심 될꺼같아요
mamondebaltob (32,750 포인트) 님이 2015년 3월 6일 답변
답변 주셔서 감사합니다.

답변 주신 내용은 response의 응답 코드를 통해 세션 처리를 하라는 말씀 같은데 질문에 언급한대로 AsyncTask 완료 전에 세션 처리가 이루어져 response 받기 전에 로직이 끝난다는 것입니다.

답변 주신 내용의 의도를 잘 파악하지 못하였는지는 몰라도 답변 주신 내용을 더 곰곰히 생각해서 활용해 보도록 하겠습니다. 감사합니다.
잉? 제가 잘못 이해했는지 모르겠는데
앱 -> 요청 (AsyncTask) -> 서버에서 응답 -> (onPostExecute) 구조일텐데
AsyncTask 로 요청을 함과 동시에 세션 처리를 앱단에서 하신다구요?
상황을 좀 더 풀어서 얘기해주셔야 이해할 꺼 같아요
...