CI 묻고 답하기

제목 세션이 끊어지는데 조언 한번 주십시오.
글쓴이 작성시각 2015/11/16 13:23:43
댓글 : 6 추천 : 0 스크랩 : 0 조회수 : 16136   RSS
컨트롤러에서
$userid=$this->session->userdata('userid');
$level=$this->session->userdata('level');
이렇게 셋을 하고.

view에서
$this->session->userdata('level');
이렇게 사용을하는데.
view에서 세션이 사라져버리네요.

제가 세션값을 추적하기위해서 컨트롤러에서
print_r($_SESSION);하니 출력이됩니다. 그런데 view에서 print_r($_SESSION);하니 아무것도 없네요.
여기저기 삽질해보다가

컨트롤러에서
원래코드는 세션값을 셋한다음에
 redirect('/admin/partcollect/', 'refresh');
이런식으로 리다이렉트를 하거든요 그런데 이걸 임의페이지에  $this->load->view('admin/login/login');
로드 시켜봤는데 컨트롤러에서 셋팅한 세션값이 찍혔습니다.
redirect() 하면 세션이 사라져버리는것 같은데 왜그럴까요?




 
 다음글 codeigniter에서 질문입니다. (5)
 이전글 나만의 라이브러리에 관해 초보질문 드립니다. (2)

댓글

kaido / 2015/11/16 13:59:23 / 추천 0
2가지 착오를 하고 계십니다.

1. 세션 생성 방법이 잘못 되었습니다.

$newdata = array('userid'=>$userid, 'level'=>$level);
$this->session->set_userdata($newdata);    

set_userdata 입니다.

2. ci 세션과 php  네이티브 세션은 같지 않습니다.

$this->session->userdata['id'] != $_SESSION['id'];

ci는 자체적인 세션을 사용합니다.

ps. 덤으로 ci 세션 데이터는 $this->session->all_userdata(); 
/ 2015/11/16 14:21:57 / 추천 0
답변갑사드립니다.
1. 제가 질문을 잘못드린것같네요. 로그인처리하는 다른 클래스에서  $this->session->set_userdata()를 했습니다.
2.제가 잘못알고있는 사실이었네요 감사합니다.

콘트롤러에서 
print_r($this->session->all_userdata());  세션값들이 출력됩니다.
redirect한 view 페이지에서
print_r($this->session->all_userdata());  찍어보니"Array ( [__ci_last_regenerate] => 1447652837 ) " 이렇게만 출력되고 id.level 세션값들이 하나도 없네요

 redirectㄸㅐ문에 그런것같다고 예상은하는데  왜 세션이 사라지는지..알 수가 없네요.
 
kaido / 2015/11/17 08:48:09 / 추천 0
음.. 몇가지 체크를 해보셔야 할것 같습니다.

1. redirect 한 페이지의 컨트롤러에 세션이 로드가 되었는지.
[세션은 보통 전 페이지에 사용되니 auto load 해놓으시면 좋습니다.]

2. 세션 설정
config 에 세션 설정들을 다시 체크해 보셔야 할것 같습니다.
db 세션을 넣어놓고 db에 업데이트가 안되고 있거나
혹은 파일로 설정해 놓고 파일이 권한 문제로 생성이 안되고 있거나.
아이피 매칭을 넣었는데 아이피가 매칭이 안되고있거나..

개인적으론 오직 다른 컨트롤러에서만 세션이 안 나온다면 세션이 제대로 로드가 안된거라 생각 됩니다.

ci 버전하고 호스팅 서버 환경은 어떻게 되시는지?

 
/ 2015/11/17 09:18:34 / 추천 0
kaido님 답변감사합니다.
ci버젼은 3.0.2  서버는 집에 centOS 설치해서 사용하고있습니다.


/appliaction/config.php
$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = NULL;
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;

이런식으로 설정된 상태입니다. 
kaido / 2015/11/17 09:23:12 / 추천 0
세션 파일이 저장 안되고 있는것 같습니다.

파일로 설정 하시면 세션이 파일로 기록이 되거든요.
$config['sess_save_path'] = 'ci_sessions';

이렇게 해놓으면 

root 에 ci_sessions 라는 폴더가 생성 될 것입니다.


세션을 파일이 아닌 디비로 하고 싶으시면

$config['sess_driver'] = 'database';

이렇게 설정 하시면 됩니다.

물론 세션 테이블도 생성해 놓으시구요.

이렇게 설정 하시면 됩니다.

물론 세션 테이블도 생성 해 놓으시구요.
/ 2015/11/17 10:02:52 / 추천 0
말씀대로
$config['sess_save_path'] = '/www/application/ci_sessions/'; 고쳤고
터미널에 들어가 /www/application/ci_sessions/  폴더를 확인해 세션이 생성된것을 확인 하였습니다.
희한하게 콘트롤러에선 찍히는데 redirect 후  view 페이지에선 해당 세션값이 없네요
아무래도 무슨 설정이 잘못된 모양인가봅니다. 댓글 감사합니다 kaido 님