| 제목 | view에서 session 정보 가져오기 | ||
|---|---|---|---|
| 카테고리 | CI 2, 3 | ||
| 글쓴이 | Givepro | 작성시각 | 2016/12/02 09:28:32 | 
|  | |||
| 어제부터 아무리 봐도 이해가 되질 않는부분이있어서 질문을 올립니다.. 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
                             | 
| 
                                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 는 세션을 넣어주는 펑션이니 | 
if ( @$this -> session -> set_userdata('logged_in') == TRUE) { ?>
이게 맞나요? 첨보는 구문인데요
조건문에 set_userdata 해도 되는지요?