CI 묻고 답하기

제목 view에서 session 정보 가져오기
카테고리 CI 2, 3
글쓴이 Givepro 작성시각 2016/12/02 09:28:32
댓글 : 11 추천 : 0 스크랩 : 0 조회수 : 18629   RSS

어제부터 아무리 봐도 이해가 되질 않는부분이있어서 질문을 올립니다..

ci_sessions을 이용해서 로그인까지 구현은 했습니다.

물론 로그아웃도 되고 세션이 db table인 ci_sessions에 들어오는것까지 확인했습니다.

세션이 없으면 로그인페이지로 이동하게끔 처리를 해놔서 세션이 확실하게 들어오는것은 확인했습니다.

그런데

 

<?php 

if ( @$this -> session -> set_userdata('logged_in') == TRUE) {  ?>         

<?php echo $this -> session -> userdata('user_id');?>

<?php

}                           

?>

 

이 구문을 view단에서 사용하려고하면 내용이 보이지않습니다...  user_id 값이 admin이기때문에 admin이 나와야 하는게 정상인데

왜 나오지않는지를 모르겠습니다. 분명 세션은 들어가있는데...

 

view에서는 template를 사용해서 tpl파일을 사용하고있습니다. 혹시 이게 문제가 있는건가요?

참고로 config의 세션 설정은 

$config['sess_cookie_name']		= 'ci_session';
$config['sess_expiration']		= 7200;
$config['sess_expire_on_close']	= FALSE;
$config['sess_encrypt_cookie']	= FALSE;
$config['sess_use_database']	= TRUE;
$config['sess_table_name']		= 'ci_sessions';
$config['sess_match_ip']		= FALSE;
$config['sess_match_useragent']	= TRUE;
$config['sess_time_to_update']	= 300;

세션 설정값은 전부 TRUE로도 해봤는데 똑같습니다...

밑에는 로그인 처리 메소드입니다.

/*
     * 로그인 처리
     */
    public function login() {
    	$this->tpl->define('content', '/index.tpl');

        // Form validation 라이브러리 로드 ( 폼 검증 라이브러리 로드)
        $this->load->library('form_validation');

        //보안 헬퍼 로딩
        $this->load->helper('security');

        // 폼 검증 필드와 규칙 사전 정의
        $this -> form_validation -> set_rules('user_id', '아이디', 'required|alpha_numeric');
        $this -> form_validation -> set_rules('user_password', '비밀번호', 'required');
        echo '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />';
        if ($this -> form_validation -> run() == TRUE) {
            $auth_data = array(
                'user_id' => $this -> input -> post('user_id'),
                'user_password' => md5($this -> input -> post('user_password')),
            );
            $result = $this -> keunsik_model -> login($auth_data);
            if ($result) {
                $newdata = array(
                    'user_id' => $result -> user_id,
                    'user_name' => $result -> user_name,
                    'logged_in' => TRUE
                );
                $this -> session -> set_userdata($newdata);
                alert('로그인 되었습니다.', '/keunsik/board_list');
                exit;
            } else {
                alert('아이디와 비밀번호를 확인해 주세요.', '/keunsik');
                exit;
            }
        } else {
            $this->tpl->print_('content');
        }
    }

도와주세요 ㅜㅜ

 다음글 CI에서 model 호출관련 오류 질문입니다. (10)
 이전글 CI를 설치하고 싶습니다. (1)

댓글

엘제이 / 2016/12/02 10:22:56 / 추천 0

if ( @$this -> session -> set_userdata('logged_in') == TRUE) {  ?>         

이게 맞나요? 첨보는 구문인데요

조건문에 set_userdata 해도 되는지요?

Givepro / 2016/12/02 10:35:08 / 추천 0

@는 소스 수정하다가 모르고 넣은것같습니다 ㅜㅜ

@빼고

<?php
                if ( $this -> session -> userdata('logged_in') == TRUE) {
                    ?>

                    <?php
                }
                ?>

로 수정했습니다. 

Call to a member function userdata() on null in /home/httpd/www_link/dev/_cpl/keunsik/board/board_list.tpl.php on line 74

오류가 이렇게 나오는데 74번 라인은 위 코드의 if문다음 빈 줄입니다.

kaido / 2016/12/02 10:57:16 / 추천 0

@는 오류가 날 경우 오류가 아닌 무시 처리 하라는 의미입니다.

@를 빼고 나자 바로 저런 에러가 났다는 것은 해당 구문이 문제라는 반증이구요.

$this->output->enable_profiler(true);

 

넣어보시고 세션 데이터 확인해 보세요.

세션 데이터가 정확히 들어가지 않은것으로 보입니다.

 

PS.  true 비교문은 가급적 === 이렇게 해주시는게 좋습니다. == 보다 좀 더 정확하게 비교합니다. [php 만 이렇습니다.]

 

 

 

Givepro / 2016/12/02 11:05:13 / 추천 0

$this->output->enable_profiler(true);

출력내용입니다 데이터는 들어가있는데... 도대체 뭐때문인지 ㅜㅜ

Givepro / 2016/12/02 11:08:59 / 추천 0
var_dump($this->session->userdata()); 로 찍어보니 false가 나오는데.. ci안에서 문제가 있는걸까요?
kaido / 2016/12/02 11:15:23 / 추천 0

DB 말고 바로 밑에 

 SESSION DATA  (Show

가 있습니다. 클릭 하시면 데이터가 나옵니다.

일단

$config['sess_match_useragent'] = TRUE;

이것도 false 로 바꿔 주시구요

그리고 ci 버전이 3.x 버전이 아니신것 같네요.  2.x대 버전이 세션 부분에 문제가 조금 있는 편이긴 합니다.

버전 올릴수 있으면 올리시는게 좋습니다.

 

 

그리고 세션 라이브러리 로드 정말로 된건지 확인해 보세요.

 

Givepro / 2016/12/02 11:23:04 / 추천 0

SESSION DATA  (Show) 부분이 안나오는데 ci 버전문제인가요? 회사에서 과제로 받은 ci라서 버전은 2.1이었습니다.

위에 말씀하신 config도 false로 해도 똑같이  Call to a member function userdata() on null이 나오네요

세션 라이브러리는 construct에도 선언하고 login처리 그 이후 페이지에도 전부 적용했습니다.

$this->load->library('session');

 

Givepro / 2016/12/02 13:11:19 / 추천 0

세션값은 저장이 되는것을 확인하고 우선 직접 control에서 배열하나를 생성해주고 직접넣어주는식으로 했습니다.

$ssssion_data = Array();
        $session_data['user_id'] = $this->session->userdata('user_id');
        $session_data['user_name'] = $this->session->userdata('user_name');
        $this->tpl->assign('userdata', $session_data);

이렇게 했는데 더 이쁘게 보여줄방법없을까요??

전상민 / 2016/12/02 14:15:23 / 추천 0
$this->tpl->assign('userdata', $this->session->all_userdata());

$this->session->all_userdata(); 로 세션에 담겨 있는 모든 데이터를 받아 올 수 있긴 합니다만

세션 체크 후 리다이렉트하는 로직은 뷰 보다는 컨트롤러에 있는게 낫지 않을까 싶습니다.

Givepro / 2016/12/02 16:19:24 / 추천 0
넵 kaido님 전상민님 모두모두 답변감사합니다.
respol / 2016/12/07 11:21:50 / 추천 0

if ( @$this -> session -> set_userdata('logged_in') == TRUE) {

----> if ( $this -> session -> userdata('logged_in') == TRUE) { 

이렇게 해야되지 않을까요? set_userdata 는 세션을 넣어주는 펑션이니