2013-09-27 3 views
0

채팅 응용 프로그램을 개발하려고하는데 다른 사용자가 활성 상태인지 여부를 알아야합니다. 이미 "timestamp"예제를 보았습니다 (마지막 활동이 지정된 시간 이상인 경우). 사용자를 오프라인으로 생각해보십시오.)이 메소드의 문제점은이 코드가 자바 스크립트를 통해 정기적으로 반복 실행되어야한다는 것입니다.세션 ID가있는 세션의 상태 확인

그래서 세션 ID를 알면 서버에서 세션이 활성 상태인지 아닌지를 확인할 수있는 방법이 있다면 생각할 수 있습니다. 가능하면 MYSQL에서 "마지막 세션 ID"에 대한 추가 열을 만듭니다. 테이블과 나는 그것이 유효한지 또는 내가 메시지를 보낼 때마다 닫히고 다른 쪽 사람이 활동하는지 아닌지를 확실히 알 수있다.

+1

이것은 나에게 너무 위험한 것 같습니다. 세션 ID는 절대로 변경되지 않을뿐만 아니라 잠재적으로 다른 사용자의 세션 ID를 사용자에게 노출시킵니다. 이렇게하면 세션 고정 공격이나 세션 도용이 간단해질 수 있습니다. – GordonM

답변

0

당신은 아약스와 PHP로 이것을 할 수 있습니다 : 그래서 당신은 설정해야

자바 스크립트의 setInterval을 :

function checkSessionTime(){ 
if($_SESSION['YourSessionId oder YourUserId']){ 
echo json_encode(array('success' => true, 'state' => 'valid')); 
}else{ 
echo json_encode(array('success' => true, 'state' => 'expired')); 
} 

:

PHP에서
setInterval(function() { 
$.ajax({ 
url: 'ajax.php', 
params:{ 
    action:'checkSessionTime' 
}, 
    success: function(response) { 
    var resp = JSON.parse(response.responseText); 
    if(resp.state != 'valid') 
    { 
    location.reload(); 
    } 
} 
    }); 
    }, 1000 * 60* 10); 

이 같은 기능을 가지고 }

+0

다른 사람의 상태를 알 수있는 방법은 무엇입니까 – nanu146

+0

죄송합니다. 이해하지 못했습니다. 나는 그 질문이 단지 세션의 상태를 확인하는 것이라고 생각했다. – Zwen2012

0

서버의 세션 정보를 보관하는 파일을 확인해야합니다.하지만 좋은 생각은 아닙니다. 내 생각에 더 나은 방법은 기본 세션 시스템을 다시 작성하고 데이터베이스 (session_id, last_action, expire_date 유지)에서 처리하는 것입니다. 이 시점에서 Yor 작업을 쉽게 수행 할 수 있습니다.

+0

당신은 더 명확하게 설명 할 수 있습니다. – nanu146