제목 | 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 해도 되는지요?