2013-05-08 3 views
2

브라우저를 닫을 때, 충돌 할 때, PC가 다시 시작될 때 등 세션을 닫아야합니다.브라우저가 닫힐 때 PHP로 세션을 닫는 방법?

쿠키 솔루션이 있다는 것을 알고 있지만 사용자가 쿠키를 삭제할 수 있기 때문에 서버 측 보안이 필요합니다.

+3

내가 아는 한 바로이 작업을 직접 수행 할 수는 없습니다 ... 시간 경과에 따른 사용자 활동을 확인하고 5 분이 지나면 누군가가 그 시간 동안 유휴 상태 일 때 -> 세션을 파괴합니다. – DarkBee

+0

중복 가능성이 있습니다. .... [브라우저를 닫을 때 세션을 폐기] [1] [1] : http://stackoverflow.com/questions/4146647/destroy-php-session-on-closing – user2362083

답변

-1

쿠키 삭제 사용자가 추락 한 브로우저를 실행하면 자동으로 삭제됩니다.

PHP에서는 사용자가 브로커를 닫을 때를 알 수 없습니다.

몇 가지 쉬운 방법은 websocket과 긴 폴링 연결이지만 구성하기 쉽지 않고 좋은 생각이 아닙니다.

3

당신은하지 않아도됩니다. 가비지 컬렉터가 세션을 정리합니다.

php ini 설정 session.gc_maxlifetime은 세션이 활성 상태로 유지 될 수있는 기간을 결정합니다.

이 값을 초과하면 세션이 자동으로 제거됩니다.

2

이렇게하면 상상할 수 없습니다. PHP에서 이러한 이벤트에 직접 반응 할 수 없습니다. 가장 가까운 세션은 ajax를 사용하여 세션을 활성 상태로 유지하는 것입니다.

  1. 은 $ _SESSION을 업데이트 할 수 있지만 아무것도하지 않는 작은 PHP 스크립트 만들기 [ 'last_request는']를 호출 할 수는
  2. 삽입 yourdomain.com/api/pulse.php 60 초마다에 요청을 전송하면 페이지에 자바 스크립트를 pulse.php.
  3. 모든 요청시 마지막 요청이 70 초 이상되었는지 확인하십시오. 클린업 스크립트를 시작하고 세션을 종료하십시오. 브라우저가 손상되면 정리 스크립트가 실행되지 않습니다. 세션은 70 초 이상 경과했지만 세션이 만료되기 전에 요청을받지 않으면 일반적인 방법으로 시간 초과됩니다. 세션 데이터를 데이터베이스에 저장하면이 문제를 해결할 수 있습니다. 그런 다음 마지막 요청이 70 초 이상 지난 세션이 있는지 정기적으로 확인하는 작업자 또는 cronjob을 실행할 수 있습니다. 왜 70 초입니까? 1 분에 한 번 요청을하면 클라이언트 쪽에서 klatencys 또는 느린 하드웨어에 시간을 허용해야합니다.
+0

@ Oliver .. 70 초마다 아약스 파일을 호출하면 사이트 속도에 영향을 미칠지 모르는가? –

+0

@Vishal 서버가 더 많은 요청을 처리해야합니다.그러나 PHP 스크립트는 매우 짧을 수 있으며 분당 추가 요청이 실제로는 문제가되지 않습니다. –

0

안녕하세요 세션을 닫을 필요가 없습니다. 사용자가 브라우저를 닫을 때 세션을 파기하는 세션의 기본 동작 때문입니다. 그리고 우리는 session.cookie_lifetime = 0을 수행하여 php.ini 파일의 세션 수명을 변경함으로써이 동작을 변경할 수 있습니다. 그렇지 않으면 브라우저를 다시 열면 기본적으로 세션에 데이터가 없습니다.

관련 문제