2013-02-09 3 views
4

codeigniter를 사용하여 데이터베이스에 세션을 저장하는 데 문제가 있습니다.데이터베이스에 세션을 저장하는 Codeigniter

사용자가 로그인하면 세션이 만들어져 데이터베이스에 저장됩니다. 데이터가 데이터베이스에 입력됩니다. 사용자가 로그 아웃 버튼을 사용하면 세션 데이터가 비워 지지만 세션은 여전히 ​​데이터베이스에 있습니다.

사용자가 로그 아웃 버튼을 사용하지 않고 웹 브라우저를 닫을 때 문제가 발생합니다. 세션 데이터는 비워지지 않지만 사용자는 여전히 로그 아웃됩니다. (내가 설정 파일 내 설정이 hava) 세션은 데이터베이스에서 파괴해야하지만 그것은 아닙니다!

'로그 아웃'버튼을 누른 후 사용자가 다시 로그인하면 사용자가 처음 로그인했을 때 만들어진 세션에 데이터가 다시 채워집니다. 이렇게 아무 문제도.

그러나 사용자가 브라우저를 닫은 후에 다시 로그인하면 새 세션이 만들어집니다.

이 문제는 사용자가 브라우저를 종료 할 때마다 세션이 끊이지 않고 끝나기 때문에 발생합니다.

나를 혼란스럽게하는 다른 것 : 계정으로 로그인하면 세션이 만들어집니다. 그런 다음 해당 계정으로 로그 아웃하고 다른 계정으로 로그인하면 세션은 다른 계정과 동일한 레코드에 저장됩니다. 세션 테이블의 새 레코드는 언제 만들어 집니까?

버전 2.1.3의 codeigniter를 사용하고 있습니다.

내가 뭘 잘못하고 있니?

//Session config: 

$config['sess_cookie_name']  = 'ci_session'; 
$config['sess_expiration']  = 7200; 
$config['sess_expire_on_close'] = TRUE; 
$config['sess_encrypt_cookie'] = FALSE; 
$config['sess_use_database'] = TRUE; 
$config['sess_table_name']  = 'ci_sessions'; 
$config['sess_match_ip']  = FALSE; 
$config['sess_match_useragent'] = TRUE; 
$config['sess_time_to_update'] = 300; 
+0

CodeIgniter의 버전은 무엇입니까? – FoolishSeth

+0

버전 2.1.3의 codeigniter – Arnout

답변

3

당신은 TRUE-sess_expire_on_close 세트를 가지고, 그래서 이것은 예상되는 동작, 당신은 은 일반적으로 원하는 대부분의 상황에서 그. 문제는 브라우저가 닫히고 다시 열릴 때 새로운 쿠키 (따라서 세션)가 생성된다는 것입니다. CI session class documentation에서 (그것은 DB에 저장하는 세션에 대해 이야기 아래로 이동) :

참고 : 세션 클래스가 내장되어 자신을 작성할 필요가 없습니다 유효 기간이 경과 한 세션을 제거 가비지 컬렉션 그것을하는 루틴.

그래서 걱정하지 않아도됩니다. 고아 세션은 세션 클래스에 의해 DB에서 자동으로 가비지 수집됩니다. 원하는 경우 cron을 통해 코드를 제거하도록 코드를 구현할 수 있지만 실제로는 필요하지 않습니다. 이제

이 (예를 들면 '하는 것은 나를 기억') 사용자 로그인 특정에 대한 문제를 제시하는 경우 하지만 당신은 당신이 수동으로 다른 쿠키를 설정하여 해결할 수 있습니다, 다른 사람을 위해 주변에 만료 세션을 원하는 세션 쿠키를 훨씬 오래 보존하고 세션 DB 내에서 항목을 연결합니다. 이렇게하면 사용자가 누구인지 파악하고 마술처럼 지속되어야하는 경우 세션을 재구성 할 수 있습니다. 다소 관련있는 질문에 대해서는 in this answer에 대해 좀 더 자세히 설명합니다.

관련 문제