2014-01-26 94 views
0

我在製作視圖計數系統。但問題是,無論何時重新載入頁面,視圖都會增加。
爲了阻止它,我使用了一個會話變量。
的代碼如下:檢查是否設置了變量,然後相應地執行該功能

if ($_SESSION['var'] == NULL){ 
    $start = "UPDATE table SET views = views+1 WHERE value = $value"; 
     $_SESSION['var'] = true; 
} 

如果頁面被刷新,會話變量保持不變,條件失敗並沒有任何反應。

問題:
但是,如果頁面關閉並重新打開,則視圖不會增加,而應該增加。
我在做什麼錯?

我寫了session_start()和一個PDO查詢來執行該函數。

+0

你需要增加計數,當任何人登錄時,註銷或關閉瀏覽器後,你需要銷燬會話。 –

+0

你需要更精確地瞭解你的櫃檯的過程(爲什麼你需要關閉和重新打開等,不同的使用情況),並重新增加櫃檯。你可以玩一個時間戳,或者事實上有很多解決方案,這取決於你的需要。 – Mike

+0

向我們展示您的完整代碼,包括您定義'$ value'的位置。如果我不知道'洞'在哪裏,那麼沒有任何意義。 **前面!!!** –

回答

0

爲了實現您正在尋找的內容,您需要銷燬瀏覽器選項卡/窗口關閉的會話。因此,您需要一個在窗口關閉時破壞會話參數的Ajax請求。

從這篇文章中引用:http://eureka.ykyuen.info/2011/02/22/jquery-javascript-capture-the-browser-or-tab-closed-event/

在Web根,創建JS/check_browser_close.js。

/** 
* This javascript file checks for the brower/browser tab action. 
* It is based on the file menstioned by Daniel Melo. 
* Reference: http://stackoverflow.com/questions/1921941/close-kill-the-session-when-the-browser-or-tab-is-closed 
*/ 
var validNavigation = false; 

function wireUpEvents() { 
    /** 
    * For a list of events that triggers onbeforeunload on IE 
    * check http://msdn.microsoft.com/en-us/library/ms536907(VS.85).aspx 
    * 
    * onbeforeunload for IE and chrome 
    * check http://stackoverflow.com/questions/1802930/setting-onbeforeunload-on-body-element-in-chrome-and-ie-using-jquery 
    */ 
    var dont_confirm_leave = 0; //set dont_confirm_leave to 1 when you want the user to be able to leave withou confirmation 
    var leave_message = 'You sure you want to leave?' 
    function goodbye(e) { 
    if (!validNavigation) { 
     if (dont_confirm_leave!==1) { 
     if(!e) e = window.event; 
     //e.cancelBubble is supported by IE - this will kill the bubbling process. 
     e.cancelBubble = true; 
     e.returnValue = leave_message; 
     //e.stopPropagation works in Firefox. 
     if (e.stopPropagation) { 
      e.stopPropagation(); 
      e.preventDefault(); 
     } 
     //return works for Chrome and Safari 
     return leave_message; 
     } 
    } 
    } 
    window.onbeforeunload=goodbye; 

    // Attach the event keypress to exclude the F5 refresh 
    $(document).bind('keypress', function(e) { 
    if (e.keyCode == 116){ 
     validNavigation = true; 
    } 
    }); 

    // Attach the event click for all links in the page 
    $("a").bind("click", function() { 
    validNavigation = true; 
    }); 

    // Attach the event submit for all forms in the page 
    $("form").bind("submit", function() { 
    validNavigation = true; 
    }); 

    // Attach the event click for all inputs in the page 
    $("input[type=submit]").bind("click", function() { 
    validNavigation = true; 
    }); 

} 

// Wire up the events as soon as the DOM tree is ready 
$(document).ready(function() { 
    wireUpEvents(); 
}); 

在Web根還創建以下的.html測試上述JavaScript文件。

<html> 
    <head> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script> 
    <script type="text/javascript" src="js/check_browser_close.js"></script> 
    </head> 
    <body> 
    <h1>Eureka!</h1> 
     <a href="http://www.google.com">Google</a> 
     <a href="http://www.yahoo.com">Yahoo</a> 
     <a href="http://ykyuen.wordpress.com">Eureka!</a> 
    </body> 
</html> 

現在您需要修改代碼來調用服務器端文件來使用Ajax銷燬會話。

相關問題