2012-05-28 4 views
0

[x] (onunload가 아님)을 클릭하여 페이지를 닫을 때 세션을 설정 해제하려면 어떻게해야합니까? 페이지를 열 때 닫을 때 삽입하려고하지만 새로 고칠 때 삽입하고 싶지 않습니다.PHP에서 웹 페이지를 닫을 때 세션을 설정 해제하는 방법

if (!isset($_SESSION["visits"])) 
    $_SESSION["visits"] = 0; 
    $_SESSION["visits"] = $_SESSION["visits"] + 1; 
if ($_SESSION["visits"] > 1){echo "You hit the refresh button!";} 
else{ 
    mysql_query(
     "INSERT INTO najd_visit(visit_userId, visit_staticId, visit_page, 
      visit_enterTime)VALUES ('$userId', '$Sid', '$title', '$date') "); 
    echo "This is my site"; 
    //unset($_SESSION["visits"]); 
} 
+0

변수에 직접 쿼리를 삽입하려면 sqll hell을 구울 수 있습니다. PDO 또는 mysqli를 사용하여 매개 변수로 삽입하십시오. –

+0

사용자가 떠날 때 JavaScript 기능을 감지 할 수없는 이유는 무엇입니까? –

+0

가능한 [브라우저 또는 탭 닫을 때 세션 닫기/종료] (http://stackoverflow.com/questions/1921941/close-kill-the-session-when-the-browser-or-tab-is) 닫힘) – Quentin

답변

1

만들기 아약스는 휴가 (onbeforeunload 이벤트) 전 페이지 로딩과 오른쪽의 JS 이벤트에 귀하의 PHP를 호출합니다. 두 이벤트 리스너를 직접 JS 크로스 브라우저 구현 코드를 매우 까다 롭습니다로

더 나은는 jQuery를 같은 JS 라이브러리에 의존하고 있습니다.

UPD. @piers comment 덕분에 페이지를 새로 고침 할 때마다 내 솔루션이 완전하지 않은 것으로 나타났습니다. 작업을 올바르게 이해하면 새로 고침 이벤트를 계산하지 않고 페이지 열기 및 닫기를 계산하는 것이 목표입니다.

그래서, 아마, 가까운 페이지의 세션을 설정 해제하는 진짜 필요가 없습니다 - 그것은 서버에서 시간 제한 자체를 사라지게 할 수는?

page_id를 사용하여 페이지/세션 쌍이 고유한지 확인할 수 있습니다.

<?php 
$uri = $_SERVER['REQUEST_URI']; 
if(is_set($_SESSION['seen']) { 
    if(!in_array($uri, $_SESSION['seen'])){ 
     countup($uri); 
    } else { 
     // already counted that page 
    } 
} else { // session doesn't have the seen array yet 
    countup($uri); 
} 

function countup($uri) { 
    $_SESSION['seen'][] = $uri; 
    mysql_query(" 
     INSERT INTO najd_visit 
     (visit_userId, visit_staticId, visit_page, visit_enterTime) 
     VALUES ('$userId', '$Sid', '$title', '$date') 
    "); 
    echo "This is my site"; 
} 
?> 
+0

이것은 페이지 새로 고침 문제를 해결하지 못합니까? –

+0

예 교각 오른쪽 –

+0

교각 말했습니까? 왜 사용자가 떠날 때 JavaScript 기능을 감지 할 수 없습니까? , 어떻게 할 수 있습니까? –

0
session_set_cookie_params(0); 
session_start() 

설명서 : http://www.php.net/manual/en/function.session-set-cookie-params.php


가 명확히하기 위해 :

당신을 당신이 이미 있다는 계산하는 경우 예를 들어, 확인, 세션에서 방문 페이지 URL을 유지할 수 있습니다 사용자가 더 이상 귀하의 사이트를 방문하지 않을 때 세션을 종료 하시겠습니까? 그러나 그들이 당신의 위치 (뒤 단추, 앞으로 등등)에 체재하는 경우에 당신은 회의를 지키고 싶습니다.

는 직접적인 질문에 대답하는 - 즉 코멘트 요청에 따라 그들이있는 "X"를 클릭 할 때 - 사용자가 브라우저를 닫을 때 당신은 추적 할 수 없습니다.

사용자가 사이트의 페이지 STIL로 쓸어 넘기는 할 수있는 경우가 발생하기 때문에 당신은 "으로 onUnload"를 사용할 수 없습니다.

그래서 당신은 네 가지 옵션이 있습니다

1) 수동으로 쿠키를 사용하여 세션을 제어하고 브라우저 세션이 종료 될 때 만료 쿠키를 설정합니다.

2) Mofify session_set_cookie_params (0)의 브라우저가 닫힐 때 http://www.php.net/manual/en/function.session-set-cookie-params.php 정도로 세션 종료한다.

3) Modity php.ini의 session.cookie_lifetime 브라우저가 종료 (세션 종료 0에 - 이상하지만, 더 세계와 동일)

4 것은) '다시 아약스 호출 30 초마다 가지고, 당신은 돈 경우 잠시 후에 콜백을 받으면 브라우저가 닫혔다가 세션을 종료한다고 가정합니다. (상당히 많은 처리가 필요합니다!)

관련 문제