2012-10-04 5 views
0

내 현재 작업에는 사람들이 로그인 할 수있는 사이트가 포함되어 있으며 특정 주제에 대한 일련의 교육 비디오를 볼 수 있습니다. CodeIgniter에서 이것을 개발했습니다. 유일한 문제는 일단 내가 로그인하고 세션을 만들면 세션이 몇 분 후에 불가사의하게 사라지는 것 같아서 신비스럽게 로그인 페이지로 되돌아갑니다. (누군가가 .? sess_time_to_update 처음에 너무 높게 설정되어 왜CodeIgniter없이 내 세션을 파괴

$config['sess_cookie_name'] = 'cc_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'] = 'cc_sessions'; 
$config['sess_match_ip'] = TRUE; 
$config['sess_match_useragent'] = TRUE; 
$config['sess_time_to_update'] = 3000000; 

, 나는 5 후 세션을 갱신, 즉 범인이라고 생각 : 로그인받지 않고 교육 비디오 페이지이 내 config.php를 페이지에 코드 블록이다 분, 데이터베이스에 기록 할 세션과 모든 좋은 것들을 설정했습니다. 제발, 저에게 질문을하고 이것 저 밑으로 가도록 도와주세요!

나는 iFrame을 가지고 있다고 지적해야합니다. 코스 페이지에 이런 식으로 서버에 "핑 (ping)"을 되돌려 보내고 있습니다 ...

<iframe id="timerAddEnd" style="display:none;" src="http://www.example.com/course/finish/<?=$course->intKey?>/ping" > 
</iframe> 
<script type="text/javascript"> 
     var auto_refresh = setInterval(function() 
     { 
      var iframe = document.getElementById('timerAddEnd'); 
      iframe.src = iframe.src; 
     }, 60000); 
     // refresh every minute 
</script> 

이것은 범인이 될 수 있습니까? 나는 이것이 초기 문제에 대한 빠르고 더러운 수정이되기를 바랐다.

답변

3

FirePHP와 같은 확장 기능이 설치된 Firefox 및 Firebug를 사용하고 있습니까? 이러한 설정이있는 경우 Firebug 콘솔을 열거 나 닫을 때 사용자 에이전트 문자열이 변경되어 세션이 CI에서 더 이상 인식하지 못하기 때문입니다.

제 해결 방법은 FirePHP를 사용하지 않도록 설정하는 것입니다. 사용자 에이전트 문자열을 확인하고 기본 브라우저 user-agent 이외에 뭔가가 있는지 확인하십시오. 당신은 그것을 쉽게 식별 할 수 있어야합니다. 하나 있다면.

+0

흥미 롭습니다. 파이어 폭스에서 파이어 버그를 사용할 수 없게 만들었습니다. 그리고 그것은 밤새도록 세션을 유지 한 것 같습니다. 이것은 아주 좋은 일입니다!지금, 제 질문은 이것입니다 : 사람들이 그들의 컴퓨터에서 어떤 브라우저와 확장 기능을 사용하고 있는지 예측할 수 없기 때문에 아마도 서버 수준에서 구현할 수있는 문제가 있습니까? 이 문제는 많은 사람들에게 영향을 미치고 있으며 많은 사람들 (나는 그들 중 대부분이 사용하고있는 브라우저 또는 확장 기능을 이해하지 못한다고 생각합니다). 그들은 우리와 같은 개발자가 아닌 도급업자입니다. –

+0

당신은 약간 잘못되었습니다 :) CI는 IP 및/또는 사용자 에이전트가 한 요청에서 다른 요청으로 (동일한 세션 동안) 변경할 경우에만 세션을 무효화합니다. ** CI에는 '유효한 사용자 에이전트'** 또는 유사한 유사어 목록이 없습니다. 따라서 사용자는 안전합니다. 경험을 통해 내가 한 때 CI 세션 기반 인증 시스템을 사용했음을 알 수 있습니다.이 인증 시스템은 나에게 문제를 일으킨 설정입니다. (당신과 같은 이유로 - 당시에는 알지 못했지만) , 클라이언트는 그가 임의/일시적인 로그 아웃 문제를 가지고 있다고 언급하지 않았다. 그리고 그것은 까다로운 고객이었습니다. –

+0

+1 훌륭한 픽업 :) – Usman

0

음, 이것은 전체 "대답"자체하지 않을 수 있습니다,하지만 난 는 종류의 해결 방법을 마련했다.

문제는 CodeIgniter가 세션을 처리하는 것과 관련이 있습니다. 어떻게해야합니까? 백그라운드에서 실행중인 작업. 원래 iFrame에서 CI 페이지를 사용하고있었습니다. 시스템에 대한 "핑 (ping)"은 잠금을 유발 한 것입니다. 그래서, 이제 iFrame 내에서 평범하고 평범한 PHP 페이지를 사용합니다. 데이터베이스에 연결되지만 CI를 통해 수행하지는 않습니다. 문제의 테이블에 "핑 (ping)"을 받는다.하지만 세션을 중단하지는 않는다.

0

나는 CodeIgniter에서 "무작위로"파기되는 세션 데이터와 동일한 문제를 가지고 있었고, 무엇이 잘못되었는지를 알기 위해 많은 시간을 보냈습니다. 지금 나는 내 문제를 발견했다고 생각하는데, $this->session->set_flashdata이 범인 인 것처럼 보였다.

나는 이것이 사용 된 페이지에서 로그 아웃 한 것을 알아 챘다.

$this->session->set_flashdata('thisItem', 'new value'); 

는 그 때마다 세션 데이터를 파괴 할 것이다 :

$this->session->set_flashdata('thisItem', 'value'); 

나중에 같은 페이지에

다시 같은 변수가 : 나는 또한 당신이 할 경우 것으로 나타났습니다. 이제는 내 사이트에서 모든 set_flashdata를 제거했습니다. 이후로 로그 아웃되지는 ​​않았습니다. 내 문제 였으면 좋겠어요. 시간이있을 때 깜박이는 시스템을 다시 if (!isset('thisItem)) { set it; }과 같은 내용으로 다시 작성하여 다시 발생하지 않도록이 작업을 다시 시도하려고합니다. 실제로 플래시 메시지가 필요하기 때문입니다.