[CI] 로그인시 Session은 처리됐는데 로그인이 안되는 경우

하아.. 이걸로 고생을 좀 한 것 같습니다. 여러 PC로 로그인 테스트를 하던 중 Session은 문제 없이 처리가 되었는데 로그인이 되지 않았습니다. Session 등록 직후 값을 찍어보면 찍히는데 로그인 완료 화면에서 Session을 찍어보면 빈 값으로 출력되는 문제가 있었습니다.

에러로그에도 아무런 문제가 나타나지 않고 특정 PC에서만 발생하니 더 난해한 문제였습니다.

그런데 간단하게 해결이 되었습니다.

해결 방법

1. /application/config/config.php 파일을 엽니다.

2. $config[‘sess_match_useragent’] 값을 TRUE에서 FALSE로 변경합니다.

3. 로그인을 시도해봅니다.

기본적으로 CodeIgniter에서는 Session 데이터 옵션에 User_Agent를 매칭하는 옵션이 설정되어있습니다. 그런데 이 부분에서 문제가 좀 있는 것 같더군요. codeigniter session으로 검색하면 많은 질문글이 올라오는데 저와 같은 증상이었죠.

[CI] Session 데이터를 DB로 저장하는 방법

Session은 일반 적으로 파일로 저장하거나 DB에 저장할 수 있습니다. 기본 값으로는 파일로 저장되도록 설정이 되어있습니다.

이를 DB로 저장하는 방법을 소개드립니다.

1. /application/config/config.php 파일을 열어 아래 내용과 같이 수정 합니다.

sess_table_name은 ci_session으로 이름을 달리하고 싶은 경우 변경하셔도 무방합니다. 단, sess_cookie_name 의 값도 변경된 이름과 동일하게 맞춰주셔야 합니다.

2. ci_session 테이블을 만듭니다. 저장될 DB 테이블을 설정하셨다면 테이블이 필요하겠죠. ci_session 테이블의 스키마는 아래와 같습니다.

3. 로그인을 테스트해봅니다. 로그인을 시도해본 후 ci_session 테이블에 데이터가 쌓이는지 확인해보는 것으로 마무리가 됩니다.

 

 

 

[PHP] IE에서 Session 변수가 동작하지 않는 문제

얼마전 IE에서만 Session 변수가 동작하지 않는 문제가 있었습니다. 정확히는 Session 변수를 할당에는 성공했으나 다른 페이지에서 사용을 할 수 없는 문제가 있었습니다.

서버 변수가 클라이언트의 브라우저에 따라 동작여부가 다른 경우는 처음 봤습니다. 일반적으로 제 3사 쿠키라는 것을 의심해보게 되었는데 역시 해결책은 아니었습니다.

문제의 원인은 서브도메인..

서브도메인에 언더바( _ ) 가  포함되어 나타나는 현상이었습니다. 다시말해 abc_def.mysite.com 인 경우 IE에서 Session을 제대로 사용할 수 없는 문제가 발생했던 것이었죠. 다른 특수문자는 시험해보지 않았지만 가급적 사용하지 않는 것이 정신건강에 좋을 것 같습니다.

좋지 않은 예 : abc_def.mysite.com (X)
좋은 예 : abcdef.mysite.com (O)