질문 Q #23133
ci4 session 관련 질문입니다.
ci늦둥이 2021-03-21 16:17:46

안녕하세요.

세션 관련해서 질문이 있습니다.

ci 버전은 v4.1.1 입니다.

 

로그인 컨트롤러 에서

사용자 인증 성공시

세션에 값을 담으려고 하고, view 에선 공통 header 에 session 값을 체크하려고 합니다.

 

먼저 로그인 컨트롤러 입니다. ( 생략 부분은 ... 으로 표현했습니다.)

 

public function login() {
  ...
  $_session = session();
  $_session->set('is_login', 1);
  $_session->set('userInfo', [
    'user_id' => $userId, 
    'user_name' => $userName,
    ....
  ]);
  ...
}

 

공통 header 입니다.

<?php 
session_start();
$is_login = 'is_login';
if( !(isset($_SESSION[$is_login]) && !empty($_SESSION[$is_login]) && intval($_SESSION[$is_login]) == 1) ) {
?>
<script>
    location.href = "<?= site_url('/auth/login'); ?>";
</script>
<?php } ?>

 

header 부분에선.. autoload 에서 session 사용방법을 몰라 제가 아는 방식대로 하였습니다.

 

로그인을 하면 컨트롤러에선 성공하는데

공통 헤더부분에선 세션정보가 다 빠져있더라구요.. 

계속 시도해보고, 구굴링을 해도 해결되지 않아 질문글을 올리게 되었습니다.

 

감사합니다.

답변 5
#1 빛그림 2021-03-21 16:22:45
뷰에서 var_dump(session()->get('userinfo')) 으로 확인해보세요.
#2 ci늦둥이 2021-03-21 16:55:18
뷰에서 var_dump($_SESSION); 으로 확인했을때 "_ci_previous_url" 말고는 저장된 값이 없어서 질문글 올리게 되었습니다.
#3 ci늦둥이 2021-03-22 15:35:14

뷰나 컨트롤러 에서

$_SESSION 으로 사용하여 처리하였습니다.

컨트롤러에서 $session = session(); 을 사용하면 뭔짓을 해도 안들어가지네요...

제가 무엇을 뺴먹고, 무엇을 잘못했는지 잘 모르겠습니다..

#4 변종원(웅파) 2021-03-23 15:36:42

session_start 때문에 그럴거 같네요.

저는 BaseController.php 생성자에서 아래와 같이 선언하고  헬퍼나 다른 곳에서 선언할때도 똑같이 선언했습니다. 이상없이 작동중입니다.

$this->session = \Config\Services::session();
#5 ci늦둥이 2021-03-23 16:01:13

변종원(웅파)님. 답변 감사합니다.

$_SESSION 으로 사용하다가 다른분께 도움 받아서 변종원(웅파)님이 알려주신 방법처럼 수정하여 사용중입니다.

답변 감사합니다!! 정말 감사합니다!