CI 묻고 답하기

제목 CI세션 안드로이드 웹뷰와 네이티브간의 공유 문제 해결 방법 있을까요?
글쓴이 일용직노동자 작성시각 2014/10/27 21:38:08
댓글 : 4 추천 : 0 스크랩 : 0 조회수 : 16293   RSS
   public function login(){
        
        //$androidData['result'] = array();

        $data['login_by_username'] = ($this->config->item('login_by_username', 'tank_auth') AND $this->config->item('use_username', 'tank_auth'));
        $data['login_by_email'] = $this->config->item('login_by_email', 'tank_auth');

        $this->form_validation->set_rules('login', '아이디', 'trim|required|xss_clean|min_length['.$this->config->item('username_min_length', 'tank_auth').']|max_length['.$this->config->item('username_max_length', 'tank_auth').']|alpha_dash');
        $this->form_validation->set_rules('password', '비밀번호', 'trim|required|xss_clean|min_length['.$this->config->item('password_min_length', 'tank_auth').']|max_length['.$this->config->item('password_max_length', 'tank_auth').']');
        $this->form_validation->set_rules('remember', '자동로그인', 'integer');

        if ($this->config->item('login_count_attempts', 'tank_auth') AND
                ($login = $this->input->post('login'))) {
            $login = $this->security->xss_clean($login);
        } else {
            $login = '';
        }

        $data['errors'] = array();

            if($this->form_validation->run() == TRUE){
                if($this->tank_auth->login(
                        $this->form_validation->set_value('login'),
                        $this->form_validation->set_value('password'),
                        $this->form_validation->set_value('remember'),
                        $data['login_by_username'], 
                        $data['login_by_email'])
                       ){   
                        $android_sess = $this->session->all_userdata();
                        $android_ret = array(
                            'result'      => 'success'
                            ,'msg'        => '로그인에 성공하셨습니다.'
                            ,'session_id' => $android_sess['session_id']
                            ,'userid'     => $android_sess['userid']
                            ,'username'   => $android_sess['username']
                            ,'status'     => $android_sess['status']
                            ,'phoneNum'   => $android_sess['phoneNum']
                            );
                        $this->output->set_header('Content-type: application/json');
                        echo json_encode($android_ret);            
                      } else {       
                        $android_ret = array(
                            'result' => 'failed'
                            ,'msg' => '아이디 및 비밀번호를 틀리셨습니다.' 
                            );       
                        $this->output->set_header('Content-type: application/json');
                        echo json_encode($android_ret);
                      }
                    //폼 검증 오류일경우 폼 검증에서 무엇이 잘못됬는지 json으로 출
                    } else { 
                        $android_ret = array(
                            'result' => 'error'
                            , 'msg' => '잘못된 접근입니다.'
                            ,'error_msg' => $data['errors']
                            );
                         $this->output->set_header('Content-type: application/json');
                         echo json_encode($android_ret);
                    }
        }
    }

현재 android login api 부분입니다.
일단 여기서도 질문 드리고 싶은게 이 컨트롤러를 안드로이드만 접근 가능하게 할 수 있을까요?
useragent로 필터링 하려고 했으나 apache-http-client를 써서 접근을 하기 때문에 흠.. 막을 방법이 애매하더라구요.

좋은 방법 알려주시면 감사히 사용하겠습니다 ㅎㅎ; 

 

본론으로 넘어가 제일 지금 큰 문제가 



지금 ci_session 테이블인데요.
Apache-httpClient에는 세션이 할당됬는데 네이티브에 할당이 안되서 문제가 발생하는 것 같습니다.

httpclient로 로그인 시도후 , 로그인 성공하면 쿠키매니저로 쿠키를 굽고 ,
Shared Preferences 사용해서 쿠키값 저장한 다음 액티비티 전환시에도 쿠키값 유지되도록 
CookieSyncManager.getInstance().startSync();
이런식으로 사용하는 방법과 AsyncHttpClient 라이브러리 사용해서 
Persistent Cookie Storage 사용하는 방법을 사용하였습니다.

문제는 로그인 성공후 쿠키 구운 다음 로그로 찍어본 값과 액티비티 전환 후 
CookieManager.getInstance().getCookie의 값이 같은데 로그인 유지가 되지 않는것입니다.
관련 자료를 다 훑어보고있는데 안되는데 혹시 힌트 주실분 계실까요?

맨날 질문 글만 올리네요 ㅠㅠ CI포럼에 관련 세션사항들 뒤적뒤적거려봐도 흠 해결이 안돼가지고 올려봤습니다.
 

 다음글 HMVC에 대해서.. (7)
 이전글 세션 문제때문에 질문드립니다... (9)

댓글

한대승(불의회상) / 2014/10/28 08:18:50 / 추천 0
세션을 DB로 전환해서 테스트 해보세요.
taegon / 2014/10/28 18:24:16 / 추천 0
쿠기를 가져와서 엑티비티를 전환하신 후 사용하시는 httpClient에 할당하셨나요?

static으로 사용하는 클래스가 아니라면 httpClient에 다시 쿠기를 넣어주시거나 아니면 쿠키 메니저 연결하셔서

싱크를 하셔야 될겁니다.
 
일용직노동자 / 2014/10/29 23:28:10 / 추천 0

한대승 // 죄송하지만 무슨 말씀인지 이해가 잘 안가네요 ㅠㅠ;;

taegon // 답변 이제 봤네요 한번 해보겠습니다!

한대승(불의회상) / 2014/10/30 07:33:03 / 추천 0
일용직노동자// 쿠키베이스 세션을 사용하고 있는것으로 착각했습니다.
다시 보니 이미 DB 베이스 세션을 사용하고 계시네요.