2012-09-10 2 views
1

안녕하세요 모두 사용자의 세션에 대한 시간 제한에 도달하면 이상하게 작동하는 codeigniter 컨트롤러 함수에서 일부 정보를 검색하는 codeigniter보기 내에서 javascript 함수를 사용하고 있습니다. . 호출 된 PHP 함수 내에서 나는이처럼 보이는 문이 :codeigniter/탱크 인증 세션 시간 초과에 도달하면 아약스 호출에서 PHP 리디렉션 처리

if (!$this->tank_auth->is_logged_in()) { 
    redirect(site_url('login'));} 

이 그들이 로그인하지 않은 경우, 나는 응답 텍스트를 가지고 자바 스크립트 함수에서 그러나 내 로그인 페이지로 리디렉션 및 내용을 설정합니다. 그것과 같은 div. 그들은 그것이 로그인 페이지의에서 responseText를 반환하는 대신 로그인 페이지로 리디렉션의 DIV에 삽입합니다이 함수를 호출 할 때 사용자가 로그 아웃하는 경우

xmlhttp = new XMLHttpRequest(); 
    xmlhttp.open("POST", "mycontroller/myfunction/", false); 
    xmlhttp.send(); 
    document.getElementById("mydiv").innerHTML=xmlhttp.responseText; 

. 이것은 끔찍한 것 같습니다. 이 페이지를 보면서 사용자 세션 시간이 초과되면 어떻게해야합니까? 다른 응용 프로그램에 의존하기 때문에 시간 제한을 변경할 수 없습니다.

실제로 이것은 codeigniter 또는 tank_auth 문제가 아닙니다. 단순히 원래이 함수를 사용하여 responseText 문자열을 생성 할 때 대신 ajax 요청에서 호출되는 php 함수에서 리디렉션하는 방법입니다.

+0

명확히하기 위해 PHP 파일에서 ajax 요청을 사용하는 리디렉션을 사용하고 있습니까? – dbf

+0

@dbf ajax 요청은 내 애플리케이션에 필요한 사용자가 로그인했는지 확인하는 파일입니다. 로그인하지 않은 경우 로그인 페이지로 리디렉션됩니다. 여기서 문제는 로그인하지 않은 상태에서 ajax 요청이 발생해도 리디렉션 된 로그인 페이지의 responseText를 반환하는 php 함수를 호출한다는 것입니다. –

+0

내가 제대로 이해할 경우에만, AJAX 요청에 의해 호출 된 PHP 파일의 값을 로그인하면 'true'또는'false'로 변경하고'document.getElementById ("mydiv")'를 if 문은 true로만 응답 할 것이고, 이것은 우리의 경우 '로그인'을 의미 할 것입니다. – dbf

답변

1

응답을 구문 분석하고 예상 응답 유형인지 확인해야합니다. 특정 문자 수를 예상하는 경우 길이를 확인할 수는 있지만 특정 dom 객체 또는 문자열을 확인하는 것만 큼 신뢰할 수는 없습니다.

당신은 예를 들어, 할 수있는 :

if(xmlhttp.responseText.length < 200) { 
    document.getElementById("mydiv").innerHTML=xmlhttp.responseText; 
} else { 
    window.location.href = 'some url'; 
} 

또 다른 대안이 뭔가를 CodeIgniter의의 AJAX 응답 검사를 사용하는 대신 다른보기를로드 (또는 다른보기로드)하는 것입니다 :

if ($this->input->is_ajax_request()) 
{ 
    // do something else 
} 
else 
{ 
    // do what you were doing before 
} 

희망이 도움이됩니다! 나는 PHP/CI 메서드를 사용하지 않으려 고합니다. 코드에서 예외가 발생하지 않는 예외를 추가하는 것처럼 들리기 때문입니다. 그래도 전적으로 당신에게 달려 있습니다.

+0

고마워,이 정확히 내가 뭘 찾고 있었는지. –

0

로그인 디자인을 잘 알고있는 경우. 이런 식으로 당신의 반응을 처리 할 수 ​​있습니다.

success: function (response) { 

if(result.substring(0, 15) == '<!DOCTYPE html>') //Your login's HTML initials. 
    window.location = site_url_path + 'login'; //session timeout redirection. 
//your normal functionality 

} 

컨트롤러 구성에 리디렉션을 작성한 경우 유용합니다.