2013-01-04 5 views
0

세션 추적을 유지하는 PHP 응용 프로그램이 있습니다. 그가 브라우저를 닫을 때까지 응용 프로그램이 사용자 세션을 유지하기를 원합니다. 세션이 브라우저가 닫힐 때까지 만료되지 않아야합니다. 나는 자바 개발자이며 PHP에 대한 초보자입니다.브라우저가 열린 상태에서 세션을 유지하십시오.

브라우저가 닫히기 전에 세션이 시간 종료되지 않아야합니다. 브라우저가 닫히면 언젠가는 세션이 시간 초과됩니다.

+3

브라우저를 닫을 때 안정적으로 감지 할 수 없습니다. 세션 쿠키가 실제로 '세션'쿠키 (예 : 브라우저가 종료 될 때 자동 삭제됨)인지 확인하면 서버 측 세션 데이터가 고아/포기 상태가됩니다. –

+0

나는 브라우저가 닫힐 때까지 세션이 시간 초과되어서는 안된다는 것을 의미합니까? –

+0

브라우저가 닫히면 감지 할 수 없습니다. 당신이 할 수있는 일은 대부분의 사람들이 PHP에 의해 타격을받지 않을만큼 충분히 긴 타임 아웃 기간을 갖도록 PHP를 설정하는 것입니다. 예 : "부실한"세션 파일에서 24 시간 동안 사용하면 ** 브라우저를 24.1 시간 동안 사용하지 않는 사용자를 ** 얻을 수 있습니다. –

답변

1

Javascript를 사용하여 페이지 또는 브라우저 창이 닫힐 때를 감지 할 수 있습니다. 그러나 사용자가 웹 사이트를 탐색하는 것을 중지 할 수있는 방법이 많기 때문에 (브라우저 충돌, 네트워크 또는 정전 등과 같은) 통지가 제기되지 않은 상태에서이 방법을 사용하면 안됩니다.

표준 답변은 이런 종류의 일로 귀찮은 것이 아닙니다. PHP 세션에는 어쨌든 타임 아웃 메커니즘이 있습니다. 사용자가 주어진 기간 동안 페이지를로드하지 않으면 세션이 삭제됩니다. 이것은 표준이며, 그것에 대해 걱정할 필요가 없습니다. 사용자가 사이트를 사용하는 방법에 따라 시간 제한 기간을 조정하면됩니다.

당신이 정말로가 즉시 중지로 세션을 사용자에 눈을 유지하고 그들이 적극적으로 사이트에 아직도 있는지 확인하고 종료 할 경우

, 난 당신이 간단한 아약스 핑 쓰기 같은 일을 할 것 같아요 페이지가 몇 분마다 (또는 원하는 간격으로) 서버에 요청을 보냅니다.

이렇게하면 브라우저가 ping을 보내지 않을 때까지 세션 시간 제한이 매우 짧아도 세션이 활성 상태로 유지됩니다 (이는 브라우저 창이 닫혔 기 때문일 수 있지만 브라우저가 충돌하거나 네트워크 연결이 끊어진 경우 일 수 있습니다. 또는 사용자가 전원 플러그를 뽑았습니다.

이 단점은 서버에 많은 추가 트래픽 (많은 추가 작업)이 발생한다는 것입니다. 단순히 세션 만료 시간을 설정하는 것 이상의 실질적인 이점은 없습니다.

+0

이것은 실제로 유용하지만 세션이 시작되고 페이지가 열릴 때까지 시간 제한을 원하지 않습니다. –

+0

SDC가 AJAX 핑이 좋은 이유를 이미 설명했는데 누군가가 브라우저를 닫거나 세션이 시간 초과되거나 요청에 따라 삭제 될 때까지 세션을 유지할 수 없으며 사용자가 탭 또는 브라우저를 닫은 경우 추적하거나 결정할 수 없습니다 절대/마이크로 초 정밀도 –

0

나는이 질문은 조금 오래 알고 있지만 그것은 여전히 ​​여기에 관련이 있기 때문에 나는 그것을 할 방법은 다음과 같습니다

function keepMeAlive() { 
    var img = new Image(); 
    img.src = YOUR_URL + 'images/empty.gif?' + new Date().getTime(); 
} 
window.setInterval(keepMeAlive, 600000); 

는 이제 1x1 픽셀 GIF 이미지를 생성하고 지정된 URL에 업로드합니다. 위 코드는 10 분에 한 번로드하여 세션을 활성 상태로 유지합니다.

관련 문제