CI 묻고 답하기

제목 CI 3.0.6 : 세션 정보가 db에 저장되지 않습니다.
카테고리 CI 2, 3
글쓴이 쌀먹는펭귄 작성시각 2020/06/29 16:50:15
댓글 : 5 추천 : 0 스크랩 : 0 조회수 : 11326   RSS

저의 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 버전과 관련 이슈가 좀 있는것 같구요.

좋은 정보 감사드립니다.