제목 | [초보]session 유지 방법 질문 | ||
---|---|---|---|
글쓴이 | 큰용 | 작성시각 | 2011/11/01 13:31:42 |
|
|||
안녕하세요. 이곳에서 글들 보면서 현재 사이트 하나 맹글고 있는데요... 로그인 후 세션이 만들어 지는데.. <?php class Login extends CI_Controller { function __construct() { // Call the Model constructor parent::__construct(); $this->load->helper(array('url','form')); $this->load->model(array('auth_model','admin_model')); $this->load->library(array('form_validation','encrypt')); } function index() { $this->__logon(); } function __logon() { if($this->session->userdata('logged_in')) { $this->__logon_user_route(); } else { $data['title'] = "Intranet site"; $this->load->view('view_logon',$data); } } function login_form() { $this->form_validation->set_rules('userid','userid','max_length[20]|trim|xss_clean|required'); $this->form_validation->set_rules('password','Password','min_length[6]|trim|xss_clean|required'); if ($this->form_validation->run() == FALSE) { //$data['title'] = 'Intranet Login Form'; $data['title'] = "Intranet site"; $this->load->view('view_logon',$data); } else { extract($_POST); $query_str1 = $this->auth_model->check_user($userid,$password); $query_str = "SELECT * FROM user_profile WHERE pid = ? "; $query_str2 = $this->admin_model->get_admin_select_row($query_str, $query_str1['pid']); if (!$query_str1) { //login failed error $this->session->set_flashdata('login_error', TRUE); redirect(base_url('login')); } else { $newdata = array( 'logged_in' => TRUE, 'user_id' => $query_str1['userid'], 'group_id' => $query_str1['gid'], 'username' => $query_str2['username'], 'position' => $query_str2['position'] ); $this->session->set_userdata($newdata); // login success $this->__logon(); } } } function __logon_user_route() { //유저 분기를 위한 데이터 수집 $query_str = "SELECT * FROM menu_table WHERE auth_level = ? "; $gids = $this->session->userdata('group_id'); $data['menu_level'] = $this->admin_model->get_admin_select_list($query_str, $gids); //사용자별 메뉴 구분 if($gids == 'admin') { $this->load->view('view_main',$data); } elseif($gids == 'internal') { $this->load->view('view_main',$data); } } function logout() { $this->session->sess_destroy(); redirect(base_url()); } function tests() { $data['title'] = "Intranet site"; //$this->load->view('view_logon',$data); $this->load->view('view_main'); } } ?>controller admin.php <?php class Admin extends CI_Controller { function __construct() { // Call the Model constructor parent::__construct(); $this->load->helper(array('url','form')); //$this->load->model(array('auth_model','admin_model')); $this->load->library(array('form_validation','encrypt')); } function admin_menu_form() { $this->load->view('view_main'); // if($this->session->userdata('logged_in')) // { // $group_id = $this->session->userdata('group_id'); // // if($group_id == 'admin') // { // $this->load->view(admin_menu_form); // } // elseif($group_id == 'internal') // { // return false; // } // } // else // { // redirect(base_url()); // } } } ?>Views view_main.php <?php $this->load->view('view_top'); ?> <table border="1"> <tr> <td colspan="2" height="80" width="1000"><?php $this->load->view('view_top_menu'); ?></td> </tr> <tr> <td width="200"><?php $this->load->view('view_menu',$menu_level); ?></td> <td width="800"><?php $this->load->view('view_middle'); ?></td> </tr> </table> <?php $this->load->view('view_end'); ?> config 세션 설정 부분.. $config['sess_cookie_name'] = 'ci_session'; $config['sess_expiration'] = 7200; $config['sess_expire_on_close'] = FALSE; $config['sess_encrypt_cookie'] = TRUE; $config['sess_use_database'] = TRUE; $config['sess_table_name'] = 'ci_sessions'; $config['sess_match_ip'] = FALSE; $config['sess_match_useragent'] = FALSE; $config['sess_time_to_update'] = 300; /* |-------------------------------------------------------------------------- | Cookie Related Variables |-------------------------------------------------------------------------- | | 'cookie_prefix' = Set a prefix if you need to avoid collisions | 'cookie_domain' = Set to .your-domain.com for site-wide cookies | 'cookie_path' = Typically will be a forward slash | 'cookie_secure' = Cookies will only be set if a secure HTTPS connection exists. | */ $config['cookie_prefix'] = ""; $config['cookie_domain'] = ".domain.co.kr"; $config['cookie_path'] = "/"; $config['cookie_secure'] = TRUE; |
|||
다음글 | CI 공부 처음하는 학생 질문입니다. (3) | ||
이전글 | [초보]like에 관하여 (3) | ||
변종원(웅파)
/
2011/11/01 13:38:13 /
추천
0
|
큰용
/
2011/11/01 13:40:52 /
추천
0
빈칸으로도 해봤는데.. 마찬가지 이더라구요. ㅠ.ㅠ
네.. 도메인은 글 올리느라 바꾸었습니다. ㅠ.ㅠ |
변종원(웅파)
/
2011/11/01 13:51:33 /
추천
0
그럼 세션과 쿠키 관련 셋팅을 전부 default로 바꾸고 해보세요.
db세션 쓰시니까 그것만 놔두시고 나머지는 기본으로.. 다른 컴에서도 확인해보시구요. 그리고 사무실 내부 말고 외부의 다른 컴도 해보세요. |
한대승(불의회상)
/
2011/11/01 13:51:39 /
추천
0
^^ 별다른 이상이 없어 보이는데...
$config['cookie_secure'] = TRUE;이 부분을 $config['cookie_secure'] = FALSE;요렇게 바꾸고 테스트 해보세요. 로그인 후에 브라우져 주소줄에 ⓙavascrip:alert(ⓓocument.cookie)요거 입력 함 해보세요. ^^ |
큰용
/
2011/11/01 14:04:49 /
추천
0
혹시 사이트 오픈하면 원인이 찾아질 수 있을가요??? |
한대승(불의회상)
/
2011/11/01 14:22:25 /
추천
0
세션은 잘 생성 되는것 같습니다.
세팅상의 문제로 보이는군요. ^^ ci_session=a:4:{s:10:"session_id";s:32:"0c2c49e292c8c239453a7c12d55531cb";s:10:"ip_address";s:12:% |
큰용
/
2011/11/01 14:24:40 /
추천
0
세팅이라면.. Config 부분이겠죠... ?? 네 ... 고맙습니다.
|
한대승(불의회상)
/
2011/11/01 14:34:07 /
추천
0
큰용// Config 맞습니다. ^^
|
변종원(웅파)
/
2011/11/01 15:04:38 /
추천
0
로그인해보니 쿠키가 2개 생기네요. bigyong.co.kr, www.bigyong.co.kr
bigyong.co.kr 로 접속을 했는데 www.bigyong.co.kr로 주소가 바뀝니다. 아파치셋팅으로 하시던지 포워딩시켜주시던지 bigyong.co.kr로 접속했을때 www.bigyong.co.kr로 접속되도록 하시면 해결될 거 같네요. bigyong.co.kr 로 접속해서 bigyong.co.kr 에 해당되는 쿠키가 만들어졌는데 로그인후 포워딩할때 www.bigyong.co.kr 되어버리니 로그인 안된것처럼 나오는 것이 당연합니다. |
한대승(불의회상)
/
2011/11/01 15:26:08 /
추천
0
웅파// .bigyong.co.kr로 되어 있으면 상관 없을거 같은데..
|
큰용
/
2011/11/01 18:02:41 /
추천
0
원인 찾았습니다. 감사합니다. 웅파님.. 불의 화상님..
웅파님께서 말씀하신 도메인에 문제가 있었네요. 아파치서버 설정 도메인과 CI의 config 도메인이 서로 www 이거 하나 차이로 안되었네요. 그래도 의구심이 드는건... CI에서도 www 붙여서도 해보았는데.. 그때 역시 안되고... ㅠ.ㅠ 일단 아파치도 domain.co.kr:80 으로 설정하고 CI도 http://domain.co.kr/ 로 설정 후 정상적으로 동작합니다. 감사합니다. |
한대승(불의회상)
/
2011/11/01 23:44:31 /
추천
0
큰용// 문제를 해결 하셨다니 기쁘군요.
큰용님이 지적하신대로 약간 미심적은 부분이 존재하는것 같습니다. 이후 관련 사항을 분석하시면 해결되리라 생각 됩니다. CI와 함께 즐거운 코딩 되십시오. ^^ |
$config
[
'cookie_domain'
] =
".domain.co.kr"
;
글 올리시느라 domain.co.kr로 쓰신거죠? 실제로는 사용도메인 쓰시구요.
빈칸으로 두시고 테스트해보세요.