2012-05-28 72 views
0

當我點擊[x](不是onunload)關閉頁面時,如何取消設置SESSION。我想在打開頁面和關閉時插入,但我不想在刷新時插入。當關閉頁面時如何取消設置會話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

你將在sqli hell中插入變量直接插入查詢。使用PDO或mysqli並將它們作爲參數插入 –

+0

爲什麼您不能在用戶離開時檢測JavaScript功能? – 2012-05-28 11:54:44

+0

[關閉/關閉瀏覽器或選項卡時關閉會話]的可能重複(http://stackoverflow.com/questions/1921941/close-kill-the-session-when-the-browser-or-tab-is -closed) – Quentin

回答

1

使得Ajax調用休假(onbeforeunload事件)之前,你的PHP頁面加載和右邊的JS事件。

更好地依賴像jQuery這樣的JS庫,因爲兩個事件監聽器的直接JS跨瀏覽器實現對代碼來說非常棘手。

Upd。感謝@piers評論我看到我的解決方案沒有完成,因爲它會在頁面刷新時計數。如果我正確理解任務,則目標是統計頁面打開和離開,而不是刷新事件。

因此,也許沒有必要在關閉頁面時取消設置會話 - 讓它在服務器超時時自動消失?

您可以使用session_id來確定頁面/會話對是否唯一。舉例來說,你可以繼續訪問的網頁的URL中的會話,檢查您是否已經清點出在:

<?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

這並不解決頁面刷新問題? – 2012-05-28 12:05:36

+0

是的碼頭,正確的 –

+0

碼頭你說:爲什麼你不能讓用戶離開時檢測JavaScript函數? ,我該怎麼做,請 –

0
session_set_cookie_params(0); 
session_start() 

手冊:http://www.php.net/manual/en/function.session-set-cookie-params.php


澄清:

你想要在用戶不再訪問您的網站時終止會話?但是,如果他們留在您的網站(後退按鈕,轉發等),那麼你想保持會話。

要回答直接問題 - 無法跟蹤用戶關閉瀏覽器的時間 - 即按照評論中的要求點擊「x」時。

您不能使用「onunload」,因爲它發生在用戶可能輕彈到您網站上的某個頁面時。

所以,你有四個選項:

1)手動控制使用Cookie中的會話,並設置cookie時,瀏覽器會話結束到期。

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)有一個Ajax調用,每30秒,如果你不」在一分鐘後得到回調,假定瀏覽器已關閉,然後殺掉會話。 (需要相當多的處理!)