제목 | CI 3.0.6 : 세션 정보가 db에 저장되지 않습니다. | ||
---|---|---|---|
카테고리 | CI 2, 3 | ||
글쓴이 | 쌀먹는펭귄 | 작성시각 | 2020/06/29 16:50:15 |
|
|||
저의 config입니다. $config['sess_driver'] = 'database'; $config['sess_cookie_name'] = 'ci_session'; $config['sess_expiration'] = 7200; $config['sess_save_path'] = 'ci_sessions'; $config['sess_match_ip'] = FALSE; $config['sess_time_to_update'] = 300; $config['sess_regenerate_destroy'] = FALSE;
db는 mysql 사용중이고, 매뉴얼에 나와있는 대로 CREATE TABLE IF NOT EXISTS `ci_sessions` ( `id` varchar(128) NOT NULL, `ip_address` varchar(45) NOT NULL, `timestamp` int(10) unsigned DEFAULT 0 NOT NULL, `data` blob NOT NULL, KEY `ci_sessions_timestamp` (`timestamp`) ); 그대로 사용하였습니다.
로그인 할 때 성공하면 세션 정보를 아래와 같이 저장하게 하였는데요. $sessionData = array( 'nickname' => $nickname, 'email' => $email, 'logged_in' => TRUE ); $this->session->set_userdata($sessionData); redirect('/');
redirect해서 var_dump($this->session->all_userdata());을 하면 세션 정보가 불러와집니다.. 그런데 이게 db에는 저장이 안됩니다. 리다이렉트 성공한 후, phpmyadmin으로 테이블을 다시 조회해봐도 결과값이 없습니다. 다른 db와의 연결은 정상적으로 작동이 되는데, 이 ci_sessions의 테이블에는 적용이 안됩니다. config.php에서만 설정하면 다 되는거 같은데 안되네요. 답변 기다리겠습니다. |
|||
다음글 | ci4에서 디비 연결이 오류가 계속 나는데 따로 설정을... (5) | ||
이전글 | Message: mysqli::real_connect(... (2) | ||
한대승(불의회상)
/
2020/06/29 21:31:21 /
추천
0
현재 게시물에 올려주신 대로라면 설정상 특별히 이상 있는곳은 없습니다.
|
변종원(웅파)
/
2020/06/30 08:47:02 /
추천
0
리다이렉트후에 값이 있다는 것은 세션이 생성되었다는 건데요? 값이 아예 없는건가요? 아니면 중복 생성되서 해당 값이 없는 것처럼 보이는 건가요? |
변종원(웅파)
/
2020/06/30 08:47:45 /
추천
0
테이블명에서 언더바 빼서 테스트해보세요.
|
쌀먹는펭귄
/
2020/06/30 10:12:54 /
추천
0
한대승님, 변종원님 댓글 감사합니다. 변종원님 말씀대로 테이블 명 언더바를 제거하고 config의 sess_save_path도 같이 변경해서 테스트 해보았지만, 동일했습니다. 의심되는 걸 두서없이 적어야할거 같습니다. 제가 초보라 어디서 문제인지 잘 모르겠습니다.. 일단 저는 autoload로 database와 session을 사용하고 있습니다. 그리고 controller에서는 글에서 설명한 것과 같이 db와의 로직을 처리. view에서는 세션에 관련된 정보들만 처리하고 있습니다. 이런식으로요. <?php
$isLogin = $this->session->userdata('logged_in');
if (isset($isLogin)) {
?>
<a class="button is-warning" href="<?= base_url("/mypage") ?>">
My Page
</a>
<a class="button is-warning" href="<?= base_url("/logout") ?>">
Log out
</a>
<?php
} else {
?>
<a class="button is-warning" href="<?= base_url("/join") ?>">
<strong>Sign up</strong>
</a>
<a class="button is-warning" href="<?= base_url("/login") ?>">
Log in
</a>
<?php
}
?>
$this->session->all_userdata() 했을 때, 뷰에 보여지는 정보입니다. array (size=3) 'nickname' => string 'admin' (length=5) 'email' => string 'admin@admin.com' (length=15) 'logged_in' => boolean true' var_dump(session_id)를 뷰에 보여주었을 때 나오는 정보입니다. (이 값은 페이지가 변해도 변하지가 않더군요 세션 값을 줬든, 주지 않았든, 똑같습니다.) E:\Apache24\htdocs\bookshare2\application\views\templates\header.php:19:string 'p7cauqffbglk0ichusckrhg89v' (length=26) 이렇게 정보가 불러와지지만, ci_sessions 테이블에는 아무런 정보가 입력되지 않습니다. view는 header, main, footer를 쪼개서 불러와 씁니다. $this->load->view('header'), $this->load->view('login')... 그런데 live server에서는 array(1) { ["__ci_last_regenerate"]=> int(1593491061) } string(32) "k2j2o80narh8rjrd1004fqcvbs679n44"
이런식으로 view에 표시가 되더군요. 질문드립니다. 어떤 경우에 세션 값이 중복으로 생성이 되고, 그것을 해결하려면 어떻게 해야될까요? 로컬에서도 memcached를 사용해야되는 걸까요? 이 글을 보고 system안에 있는 session의 파일을 바꾸라는 것 해봤을 때에는 세션 값이 아닌 세션 메타데이터만 all_userdata()했을 때 불러와지더군요.
여러 노력을 해봐도 소용이 없어서 저는 꼭 도움을 받고 싶습니다..
/////////////////////////////////////////////////
해결됐습니다. 3.0.6 -> 3.1.11 버전으로 업그레이드 하니까 됩니다... 제 php 버전은 7.3.17을 쓰고 있었는데 3.0.6버전과 호환이 되지 않았나봅니다.
|
한대승(불의회상)
/
2020/06/30 14:13:07 /
추천
0
@쌀먹는펭귄 수고하셨습니다. 코드이그나이터 이전 버전이 php 버전과 관련 이슈가 좀 있는것 같구요. 좋은 정보 감사드립니다. |