2012-01-25 3 views
0

이 작업으로 어떤 진행 상황도 보이지 않습니다. 내 CI 세션 설정은 다음과 같습니다.CI 2.0.3 세션 heisenbug : 서버가 리디렉션되는 경우에만 20 분 후에 세션이 손실되고 로그에 의심스러운 항목이 없습니다.

$config['sess_cookie_name']  = 'ci_session'; 
$config['sess_expiration']  = 0; 
$config['sess_expire_on_close'] = FALSE; 
$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'] = FALSE; 
$config['sess_time_to_update'] = 7200; 
$config['cookie_prefix'] = ""; 
$config['cookie_domain'] = ""; 
$config['cookie_path']  = "/"; 
$config['cookie_secure'] = FALSE; 

세션 라이브러리가 자동로드 될 때로드됩니다. sess_update 함수를 사용하여 CI 포럼을 읽는 것에 대해 발견 한 AJAX 버그를 방지했습니다.

데이터베이스의 ci_sessions 테이블 정렬 utf8_general_ci있다 (이 모든 redirect() 호출 후 세션을 잃은 버그이었고, 그것은 정렬은 기본적으로 latin1_swedish_ci 있다는 사실에 연결되었다).

내 관리자 섹션의 사용자가 긴 기사를 추가하고 저장 버튼을 클릭하면 항상 깨집니다. 저장 작업은 다음과 같습니다

function save($id = 0){ 
    if($this->my_model->save_article($id)){ 
     $this->session->set_flashdata('message', 'success!'); 
     redirect('admin/article_listing'); 
    }else{ 
     $this->session->set_flashdata('message', 'errors encountered'); 
     redirect('admin/article_add'); 
    } 
} 

당신이 문서는 추가됩니다 저장 만에 사용자가 로그 아웃됩니다 리디렉션 20분보다 더 많은 지출을 클릭합니다.

또한 로깅을 사용하도록 설정했으며 오류가 발생하는 경우 메시지의 메시지는 The session cookie data did not match what was expected. This could be a possible hacking attempt.이지만 시간은 반으로 줄었습니다. 나머지 절반에는 아무 것도 없습니다. Session 생성자의 끝에 배치 한 메시지가 표시되고 그 외에는 아무것도 표시되지 않습니다. 모든 경우에 브라우저에서 저장된 쿠키를 보면 오류 후 쿠키의 첫 번째 부분이 해시와 일치하지 않습니다. 내가 CodeIgniter의 네이티브 세션을 사용하지 않습니다 알고 있지만 또한

는, 나는 86400

언급하는 또 다른 일에 session.gc_maxlifetime을 설정 한 내 컴퓨터에서 오류를 재현를 드릴 것입니다하지만, 모든에 이 버그를 테스트 한 다른 컴퓨터는 위에서 언급 한 것과 같은 패턴으로 나타납니다.

다음에 수행 할 작업에 대한 아이디어가 있으면 크게 감사하겠습니다. 새 버전으로 변경하거나 원시 세션 클래스 (이전 버전은 CI 1.7 용이었습니다. 여전히 작동합니까?)를 사용하면 내가 고려할 수있는 옵션입니다.

편집 : 저는 CI 2.0.3의 세션 클래스와 최신 CI 세션 클래스 사이에서 diff를 실행했습니다.

답변

0

다음은 내가 해결 한 방법입니다. 표준에서는 브라우저가 POST 요청 후 리디렉션을 허용하지 않아야한다고 말합니다. CI의 redirect() 메소드는 기본적으로 302 리디렉션을 전송합니다. 논리적 인 방법은 내 문제를 해결하지만 리디렉션에 대한 확인 대화 상자를 표시하는 경고가있는 307 리디렉션을 보내는 것입니다. 다른 옵션은 301 (영구적으로 이동 된 의미) 리디렉션 또는 선택한 솔루션 인 자바 스크립트 리디렉션입니다.

관련 문제