내가보기에 당신이 페이지에 있고 세션이 만료되고 사용자가 Ajax로 어떤 것을 요청하면 요청 된 페이지가 로그인 페이지로 리디렉션된다는 것입니다. 따라서 네트워크 트래픽과 요청한 작업을 보면 리디렉션 된 페이지가 표시되고 유효한 Json 응답이 아니므로 오류가 발생합니다.
나는 내 사이트에서 비슷한 점을 가지고 있습니다. 기본적으로 사용자가 로그인해야하는 모든 페이지는 사용자가 로그인하여 페이지를 볼 수 있는지 확인하는 기능으로 보호됩니다. 그렇지 않으면 두 가지 중 하나가 발생합니다. 사용자가 리디렉션됩니다. 요청 유형이 Ajax 인 경우 Json 오류를 구문 분석합니다.
내가 제안한 것과 비슷한 것을 채택하는 것이 좋습니다. 참고로 연속성을 유지하는 것이 중요합니다. PHP와 JS 스크립트에서 Ajax 오류를 구문 분석 할 때 PHP에서 동일한 응답 형식을 사용하는 것이 중요합니다.
예 :
public function protect($allowed = array())
{
$uri = uri_string();
// user isn't logged in
if (!$this->ion_auth->logged_in()) {
if ($this->input->is_ajax_request()) {
encode_response('error', $this->lang->line('login_expired'));
} elseif ($uri == rtrim($this->success_login_redirect, '/')) {
redirect(CMS_DIR_NAME . '/login');
} else {
$this->session->set_userdata('login_redirect', '/' . $uri);
redirect(CMS_DIR_NAME . '/login');
}
}
$this->session->unset_userdata('login_redirect');
if (!$this->ion_auth->is_admin() && !$this->ion_auth->in_group($allowed, $this->curr_user->id())) {
if (!$this->is_user_allowed($this->curr_user->group()->name)) {
show_error($this->lang->line('messages_page_access'), 403, 'Error');
}
}
}
이유도 AJAX와 세션을 사용합니까? 내게는 막대한 오버 헤드가되는 것 같다. – davidkonrad
@davidkonrad는 관리자 패널이 아약스를 사용하지 않아야 함을 의미합니까? admin = logged in = sessions – Alex
@Alex 아니요, 스크립트의 세션을 피하십시오. 차단을 막기 위해 어쨌든 닫아야 할 컨텐트를 전달하는 AJAX 스크립트에서'start_session()'의 이점을 볼 수 없습니다. 리퍼러에 액세스 할 수 있고, 요청에 티켓을 추가 할 수 있으며, 크로스 도메인 액세스 등을 방지 할 수 있습니다. – davidkonrad