CI 묻고 답하기

제목 codeigniter3 세션 관련 질문드립니다.
카테고리 CI 2, 3
글쓴이 케케케 작성시각 2020/07/22 10:01:24
댓글 : 4 추천 : 0 스크랩 : 0 조회수 : 16662   RSS

안녕하세요

 

요새 사용언어와 프레임워크를 왔다갔다 하고

오랜만에 php codeigniter3을 하다가 햇갈리는게 있어 질문글을 올립니다.

 

congfig.php 의 sess_expiration 설정이 

세션 만료 시간 아닌가요?

아래와 같이 60으로 설정하고 1분뒤에 새로고침해보면

만료되지 않더라구요

 

ci_sessions 테이블은 생성되어있습니다.

제가 잘못하고 있는 부분이 있을까요?

 

//$config['sess_driver'] = 'files';

$config['sess_use_database']    = FALSE;

$config['sess_driver'] = 'database';

$config['sess_cookie_name'] = 'ci_session';

$config['sess_expiration'] = 60;

$config['sess_save_path'] = 'ci_sessions';

$config['sess_match_ip'] = FALSE;

$config['sess_time_to_update'] = 30;

$config['sess_expire_on_close'] = FALSE;

$config['sess_regenerate_destroy'] = FALSE;

 

 

추가적으로 해당 설정의 웹이

하나의 서버에 여러개 서브 도메인의 형태로 되어있습니다.

a.test.com 

b.test.com 

c.test.com 

d.test.com 

이런식으로....

 

controller는 동일하게 사용하고 a,b,c,d에 따라서 호출하는 model이나 view가 다릅니다.

현재는 각 도메인들이 각각의 client_id와 secret을 갖고 SSO oauth 로그인을 하고있습니다.

 

구현하고 싶은 기능은 해당 도메인들이 세션을 공유하는것인데요

b,c,d사이트 접근시 a.test.com 을 통해 로그인을 하게하고 b,c,d 접근이 가능하게 하는것입니다.

system 라이브러리의 Session.php 에서

session_start() 의 윗줄에

 

        $some_name = session_name('test_session');

        session_set_cookie_params(600, '/', '.test.com'); 

 

위와 같이 하면 되긴 하지만

아무래도 system쪽 파일을 직접건드는게 좀 그렇다고 생각되서

다른 방법이 있을지.....

 

정리하자면 질문은 이정도 같습니다.

1. sess_expiration의 설정을 60으로 하고 해당 브라우저에서 60초동안 아무 움직임 없이

60초 뒤에 세션이 만료되어 다시 로그인하는게 아닌지?

 

2. 하나의 서버에 여러개의 도메인 형태로 이루어진 서비스에서

다른 서브 도메인에 접근시 a.test.com을 통해 로그인하게 하고

b.test.com을 접근 하여도 세션이 공유되어 접근이 가능하게 할 수 있는지?

 

긴글 읽어주셔서 감사합니다.

 

 다음글 파일업로드 위치 설정 (2)
 이전글 로그를 Line number까지 보고 싶습니다. (1)

댓글

변종원(웅파) / 2020/07/23 11:14:16 / 추천 0

1. 만료되어야 하는게 맞습니다. https://sanghaklee.tistory.com/49

2. cookie_domain 부분에 *.test.com 을 넣고 테스트 해보세요. (오래전 기억이라 안될 수 도 있습니다) 

포럼에 이미 올라온 질문과 해결된 내용이 있습니다. https://cikorea.net/bbs/view/qna?idx=19132&lists_style=

https://www.cikorea.net/bbs/view/qna?idx=13892&page=3&hit=not

케케케 / 2020/07/23 16:02:34 / 추천 0

웅파님 답변 감사합니다.

우선 DB 삭제가 안된건 로그아웃시에 sess_destory를 해줘야 하는거 같더라구요

그리고 아래와 같이 설정시 세션이 공유는 되는것 같습니다.

 

sess_expiration는 해당 second 동안 움직임이 없으면 로그아웃
sess_time_to_update는 움직임에 따라 갱신 혹은 유지  

이렇게 이해하였습니다.

실제로 sess_expiration 시간이 지난후에 새로고침을 하면 

다시 자동 재 로그인을 하면서

DB에 세션이 추가로 생성됩니다.

제가 잘못한 부분이 있을까요?

 

추가적으로 질문드리면 위의 설정은 모두 공통적으로

움직임이 없을때가 가정인데

로그인하고 세션이 생성 됐을때 움직임이 있더라도 특정시간뒤에 만료시키는 기능은 없나요?

php.ini의 session.cookie_lifetime와

php의 session_set_cookie_param 함수 첫번째 파라미터인 lifetime이

해당 설정 같은데 시간 설정을해도 만료가 되지않습니다..

 

 

//$config['sess_driver'] = 'files';
$config['sess_use_database']    = TRUE;
$config['sess_driver'] = 'database';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 60;
$config['sess_save_path'] = 'ci_sessions';
$config['sess_match_ip'] = TRUE;
$config['sess_time_to_update'] = 30;
$config['sess_expire_on_close'] = FALSE;
$config['sess_regenerate_destroy'] = FALSE;
 
/*
|--------------------------------------------------------------------------
| 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']    = ".test.com";
$config['cookie_path']      = "/";
$config['cookie_secure']    = FALSE;
 
Session.php의 session_start() 위에
session_set_cookie_params(60'/''.test.com'); 
 
 
변종원(웅파) / 2020/08/06 07:58:05 / 추천 0
ci 세션 라이브러리에 자동재로그인 하는 기능 없습니다. 소스상에서 처리하고 있을 겁니다.
케케케 / 2020/08/07 10:09:43 / 추천 0
웅파님 답변 감사드립니다 별도 소스로 해결하였습니다.