제목 | [해결] 세션을 읽지 못하는 질문 하나만... | ||
---|---|---|---|
글쓴이 | 밥아저씨 | 작성시각 | 2012/03/05 21:36:27 |
|
|||
약 한달 전 부터 세션문제를 해결하지 못했습니다. 결국 해결하지 못하고 꼼수를 이용하고 있었는데. 오늘은 끝을 봐야겠습니다. 사용자가 로그인을 하면 옳은 값이 들어갑니다. 하지만 페이지를 리다이렉트 하면 세션 데이터를 읽어오지 못하고 새로운 빈 세션을 자꾸 만들어냅니다. 분명 설정 관련 부분 문제인것 같습니다만.. 제가 이용했던 꼼수는, 현재 프로젝트가 안드로이드 앱 과 연동되는 형태이기 때문에 로그인할때 세션 ID를 저장한뒤 페이지 로드시 header 값에 cookie 값으로 세션ID를 날리는 형태였습니다. 하지만 이제는 웹 서비스로도 지원이 되야하기 때문에 꼭 해결해야 합니다 ㅠㅡㅠ 아래는 로그인 파트 핵심 소스 입니다. 실제 DB에 값은 맞게 들어가기 때문에 문제는 없는것 같습니다. if ($this->member->is_member($email, $password)) { $this->errcode = 100; $sess = array('email' => $email, 'password' => $password); $this->session->set_userdata($sess); } else { $this->errcode = 402; //로그인 값이 틀리면 빈 세션(칼럼)을 만들어내기 때문에 //강제적으로 삭제함 $this->session->sess_destroy(); } 아래는 테스트로 세션의 값을 불러오는 소스 입니다. 빈 값을 불러옵니다. ㅠㅡㅠ $email = $this->session->userdata('email'); $password = $this->session->userdata('password'); print $email; print $password; 데이터베이스 세션을 사용하고 있습니다. 아래는 설정 부분입니다. 현재 이용하는 서버는 점검용 테스트 서버 이기때문에 제 아이피 주소로 되어 있습니다. 하지만 실제 서버(도메인)에서도 안됩니다. ㅠ.ㅠ application/config/config.php //혹시나 해서 끝에 /(슬래쉬)를 제거도 해보고 //주소를 localhost로도 해보았지만...안됩니다. $config['base_url'] = 'http://192.168.0.5/'; $config['sess_cookie_name'] = 'ko_nb_session'; $config['sess_expiration'] = 0; $config['sess_expire_on_close'] = FALSE; $config['sess_encrypt_cookie'] = TRUE; $config['sess_use_database'] = TRUE; $config['sess_table_name'] = 'ko_nb_session'; $config['sess_match_ip'] = FALSE; $config['sess_match_useragent'] = FALSE; //사용자가 특별히 로그아웃하지 않는한 세션 유지입니다. //페이스북 앱 처럼요 $config['sess_time_to_update'] = 359000000; /*****************************************************/ $config['cookie_prefix'] = ""; //도메인 앞에 .를 삭제도 해보고 localhost로도 해보고 //아예 삭제도 해보고 모든 설정을 아예 Default 로도 해보았습니다...만 안됩니다. $config['cookie_domain'] = ".192.168.0.5"; $config['cookie_path'] = "/"; $config['cookie_secure'] = TRUE; 다음은 리눅스 서버의 아파치 설정중 서버 네임 부분 입니다. /etc/httpd/conf/httpd.conf ServerName 192.168.0.5:80 <VirtualHost *80> DocumentRoot /var/www/html/ ServerName 192.168.0.5 </VirtualHost> 구글링을 통하여 Native 세션을 적용해보았는데, 그건 잘 됩니다. 그런데 꼭 DB세션을 이용하고 싶어 요렇게 질문글을 올려봅니다. |
|||
다음글 | CI 기본 세션 이용시에 가끔 발생하는 문제 (1) | ||
이전글 | 이중 폴더 안에 컨트롤러를 넣으려고 합니다. (4) | ||
세콩
/
2012/03/05 22:01:07 /
추천
0
세션 만료기한이 0으로설정되어있네요
참고해보세요
http://codeigniter-kr.org/lecture/view/207/page/1/
|
밥아저씨
/
2012/03/05 22:06:23 /
추천
0
원래는
$config [ 'sess_time_to_update' ] = 359000000; 와 같은 값으로 되어있었습니다.
|
세콩
/
2012/03/05 22:19:26 /
추천
0
그러네요 저도 놓쳤던거 챙겨갑니닷
만료기한을 0으로주면 무기한이되는요 그렇담.. 음.. 혹시 database에 ko_nb_session 테이블은 만드셨나요? 그것도 아니라면,, 리다이렉트시에 어떤 메서드로인해 세션을 지우거나 덮어씌워지는지 확인해보세요 세션에 관련된부분에 디버그모드 시전 강추!! |
세콩
/
2012/03/05 22:40:16 /
추천
0
잘은모르겠는데 쿠키도메인설정때문에 쿠키자체를 못찾는걸수도있겠다는 생각이드네요??
그냥 느낌입니다 혹시 아직 문제를 못찾으셨다면 참고해보세용.. ㅎㅎ;; |
밥아저씨
/
2012/03/05 23:07:50 /
추천
0
네...직접 다 확인했는데, 값은 알맞게 잘 들어갑니다.
일단 더 확인을 해보겠습니다. ㅠㅡㅠ |
밥아저씨
/
2012/03/05 23:24:06 /
추천
0
감사합니다. 말씀하신대로의 문제 같더군요
// $config['cookie_prefix'] = ""; // $config['cookie_domain'] = ".192.168.0.5"; // $config['cookie_path'] = "/"; // $config['cookie_secure'] = TRUE;
이렇게 주석처리 해주니 잘 됩니다. 그런데 쿠키도메인과 어떻게 문제가 나길래 그랬던것일까요?... |
변종원(웅파)
/
2012/03/06 00:04:14 /
추천
0
.domain.com 형태로 쓰는 곳인데 아이피를 쓰셨네요.
.192.168.0.1 이렇게 쓰시면.......
|
밥아저씨
/
2012/03/06 10:05:58 /
추천
0
웅파// 아..넵 그렇긴한데 글에서 말씀드린대로 도메인으로도 안되던거라서욤...
|
정도령
/
2012/03/06 15:10:59 /
추천
0
도움이 될런지 모르겠습니다.
저도 뭔가 만들다가 세션 가지고 데이타 넣고 빼려고 하는데 계속 문제가 발생하더군요. 저의 config 에 세션 설정값은 아래와 같아요. $config['sess_cookie_name'] = 'ci_session'; $config['sess_expiration'] = 7200; $config['sess_expire_on_close'] = TRUE; $config['sess_encrypt_cookie'] = TRUE; $config['sess_use_database'] = TRUE; $config['sess_table_name'] = 'use_sessions'; $config['sess_match_ip'] = FALSE; $config['sess_match_useragent'] = TRUE; $config['sess_time_to_update'] = 300; 위 설정값들을 아무리 변경해보고 별짓을 다해도 문제가 있더군요. 그래서 세션을 살펴보니깐... 골때리게스리 사용자 세션이 자꾸 새로 생기더란 말이죠. 이것 때문에 저도 몇일 뒷골 땡겨가면서까지 거시기 했는데 결국 이렇게 해서 해결했습니다. function __construct() { parent::__construct(); header('P3P: CP="CAO PSA OUR"'); header('Cache-Control: no-cache'); header('Pragma: no-cache'); } 요거 넣어주고 난뒤로는 그러한 문제가 발생하지 않더군요. 저 같은 경우는 페이스북 API 이용해서 이것 저것 맹글어보고 있는데 세션 문제 때문에 별의 별 쇼를 다했던것을 생각하면 아주 뒷골이 겁나리 땡겨버립니다. ㅋㅎ 아무튼 이것도 하나의 해결 방법이 될듯 싶네요. |
밥아저씨
/
2012/03/06 18:40:28 /
추천
0
정도령 // 헙.. 좋은 정보 공유 감사합니다.
앞으로 페북 API 를 쓸 일이 있을텐데 큰 도움 될것 같습니다 (__) |
SMINT
/
2012/03/08 13:49:47 /
추천
0
저도 완전히 같은 문제인 것 같습니다...
profiler로 확인할 경우 같은 세션이 네 번 정도 update 되는 것 같은데, 밥아저씨 님도 똑같은 현상이신지요... 저희도 페이스북으로 로그인하는 기능이 있거든요... ㅋ |
schumann
/
2012/12/04 15:16:34 /
추천
0
저도 동일한 문제로 고생한 적이 있는데
제가 파악해 본 바로는 앱에서 전송하는 헤더에 쿠키정보에 문제가 있었습니다. 세션에 데이터 입력시 여러번에 걸쳐서 set_userdata 를 사용하니 헤더의 쿠키부분이 여러번 입력되는 현상이 나타났습니다. 이로 인해서 앱에서 헤더정보를 읽지못해서 쿠키를 읽지 못하게 되고 이로 인해 계속 새로운 세션을 생성하였습니다. 예를 들어서 $sess_array = array( "user_id" => $user_id, "user_name" => $user_name ); foreach($sess_array as $k=>$v) { $this->session->set_userdata($k,$v); } |
하루살이
/
2013/04/04 01:18:02 /
추천
0
저도 한참 헤매다가 구글링도 하고 이것저것 뒤져보다가
익스플로러 브라우저 호환모드가 있기때문에 그런게 아닌가해서 $config['sess_match_useragent'] = false; 여기 부분을 false 바꾸니 해결 되었습니다. |