2010-02-03 3 views
0

메신저 만드는 두 개의 테이블을 닫을 때 MySQL의 테이블에서 정보를 제거라는 손님이 다음 입력하면 사용자 (MySQL의에서) 자신의 브라우저

지금 우리가 자신의 개인 정보를 저장

  1. table_temp_guest
  2. table_temp_order 이 첫 번째 테이블에서 어떤 스톨에서 물건을 구매하면 table_temp_order에 임시 주문으로 저장됩니다.

    메신저 세션 ID를 사용하므로 사용자가 다음 (체크 아웃하지 않고) 로그 아웃 을 갈 때 내가 세션 ID를 사용하여) 두 테이블에서 자신의 정보 (개인 및 순서를) 삭제 :

    지금 제 질문은 , 그가 브라우저를 닫거나 계산대로 가지 않는 경우 (공감) 두 테이블에서 그의 정보를 삭제하는 방법 이 작업을 수행하는 방법을 제안 해주세요.

    추가 질문 : 다른 방식으로이 모든 과정을 수행하는 다른 방법이있다.

답변

4

사용자가 브라우저를 닫거나 새 주소를 입력하면 검색 할 수 없습니다. 기본적으로 웹 사이트의 나머지 부분과 마찬가지로 "시간 초과"기능이 있어야합니다.

+0

그리고 타임 아웃 기능을 관리합니까? u는 나에게 말해 줄 수 – diEcho

+0

테이블의 "last_updated_at"필드를 사용하고 과거에 last_updated_at 항목이있는 모든 항목을 정기적으로 (예 : 매일 한 번) 삭제합니다. –

2

당신이 자바 스크립트로 감지 할 수있는 window.onunload 이벤트가 있지만 보편적으로 지원되지 않는, 그것은 닫히고를 감지하지 브라우저가 닫힙니다.

최상의 해상도는 아마도 session_id과 마지막 액세스 날짜를 추적 할 것입니다. 모든 페이지로드시 테이블 last_accessed_date을 다시 업데이트하고 몇 시간이 지난 모든 것을 삭제하십시오.

+0

하지만 동시에 많은 손님이 다른 PC에서 사이트에있는 다음 마지막으로 액세스 한 날짜까지 특정 사용자의 정보를 어떻게 제거 할 수 있습니까 ?? – diEcho

+0

브라우저 창을 닫지 않고 동시에 컴퓨터를 사용하는 게스트가 두 명 이상인 경우 (또는 다른 하나)? 실제로 어떤 방법도 없습니다. PHP 세션은 방문 및 브라우저마다 고유합니다. 아마존을 방문하여 장바구니에 물건을 추가 한 다음 컴퓨터에서 멀리 떨어지면 다음 사람은 여전히 ​​(채워지지 않은) 주문을 볼 수 있습니다. 모든 사람들이 공용 컴퓨터에서 "다 끝났을 때 브라우저를 닫아야합니다."라고 말하는 이유입니다. 세션 데이터를 삭제하는 게스트의 로그 아웃 링크가있을 수 있습니다. – davethegr8

+0

사용자가 브라우저를 닫고 있지만 현재 로그 아웃 중입니다. – diEcho

1

시간 제한이 가장 좋은 방법입니다.

게스트 테이블에서 마지막 활성 시간을 기록하십시오. cron 작업을 웹 서버에서 주기적으로 실행하여 허용하려는 최대 시간을 초과하는 세션을 정리하십시오.

허용되는 시간에주의하십시오. 느린 사용자와 연결 끊김을 허용해야합니다.

+0

PHP에서 cronjob을 설정하는 방법을 모르겠다면 plese가 프로세스 또는 간단한 자습서 사이트를 알려줄 것입니까? 감사합니다 – diEcho

+2

당신은 그들을 PHP에서 설정할 수 없습니다; 쉘 스크립트 (특정 서버가 사용하는 모든 쉘용)를 작성하고 해당 서버의 cron-list에 삽입해야합니다. 도움이 필요하면 cron-jobs 및 항목을 작성하는 방법에 대한 다른 질문을 게시하는 것이 좋습니다. – macabail

+0

일부 호스트는 작업 입력을위한 매우 쉬운 인터페이스를 가지고 있습니다. 그것은 모두 귀하의 호스트에 따라 다릅니다. 스크립트를 PHP로 작성하고/path/to/php로 호출 할 수 있습니다. 대부분의 경우 특정 실행 파일의 경로는 웹 호스트에서 게시합니다. 셸 액세스 권한이 있으면 경로를 직접 파악할 수 있기 때문에 더 쉽습니다. 나는 phpinfo()가 심지어 실행 파일 경로를 보여줄 것이라고 생각한다. – Buggabill

0

또한 클라이언트 측에서 실행하고 서버에 ping을 실행하여 스크립트가 잠시 동안 ping되지 않았는지 사용자가 브라우저를 닫았는지 알 수 있도록 스크립트를 만들 수 있습니다. 즉, 이전 포스터에 동의 하겠지만 타임 아웃/정리 절차가 가장 좋습니다. 당신이 당신은 단지 나이가 다음 몇 시간의 ModifiedDate 필드가 모든 레코드를 삭제, 사용의 용이성에 대한 "ON UPDATE"라는 필드로 설정할 수 있습니다, 당신의 테이블에 ModifiedDate 필드를 추가 할 들어

.

1

어쨌든 session_id()를 사용하고 있다면 (이것은 세션 ID로 생각하는 것입니다) php 세션을 사용하십시오. PHP는 자동적으로 그것들을 무효화하고 두 테이블은 필요 없다 ($ _SESSION에 필요한 모든 것을 저장할 수있다).

신뢰할 수있는 broswer가 폐쇄되지 않았는지 확인하는 방법은 없습니다.

프로젝트가 작동하는 방식을 변경하지 않으려면 테이블에 생성 된 필드를 추가하고 특정 사용자를 "볼"때마다 현재 시간()으로 설정하십시오. 그런 다음이 테이블에서 특정 시간 초과보다 오래된 모든 레코드를 삭제하는 cronjob을 설정하십시오.

+0

cron 작업으로 세션 ID를 사용하여 특정 사용자의 세부 정보를 삭제하거나 cron 작업이 테이블을 비울 수 있습니까 ?? 제발 내게 cron 직업 창문 (Xampp)에 대한 sgood 사이트를 제안하십시오 – diEcho

관련 문제