我正在一個項目,其中一個我們的Web應用程序將以某種方式收集JavaScript代碼關於訪問者的統計信息但據我所知在服務器端PHP應用程序我應該以某種方式以多刷新不計算的方式處理代碼並且基於IP計數並不是一個好主意,因爲許多用戶可能具有相同的IP,cookie或會話也容易受到這個問題的困擾,因爲cookie管理器可以將所有cookie相關的網站,所以PHP不會識別用戶,並計算它新的,時間表工作和所有其他方式來解決這個問題也據我所知,基於cookie或會話或IP或IP的混合物/ referrer和頭部的所有其他可用數據,我如何處理它並從用戶那裏獲得更可靠的數據,並且不允許他們製造假貨統計。因爲我相信一定有辦法(我希望如此)...!?防止多刷新統計腳本
回答
我認爲cookie會是這類問題的理想選擇,但如果您不想使用它,那麼您已經擁有了一個強大的cookie。不幸的是,由於HTTP是無狀態的,因此您沒有其他選擇。
我會在這種情況下使用會話變量,因爲用戶不能插入保存在那裏的數據。然而,會話劫持風險很高,但如果您的網站面向此漏洞,您需要考慮在更加全球化的層面上確保網站的安全,而這正是熱門計數器。會話變量綁定到您的網站,因爲其中的數據保存在服務器上而不是用戶瀏覽器中。並且綁定到你的用戶,因爲它在用戶瀏覽器中用一個鍵保存了一個cookie,以從服務器請求數據。
下面是一個關於如何實現這個的例子,而不用擔心刪除網站上的其他會話。
<?php
function hit_counter() {
if(isset($_SESSION['hit_counter'])) { // Check if the user has the hit_counter session
if(isset($_SESSION['hit_counter']['time']) && isset($_SESSION['hit_counter']['page'])) { // Check if the user has the time and the page set from the last visit
$last_time = $_SESSION['hit_counter']['time'];
$last_page = $_SESSION['hit_counter']['page'];
$now = time(); // The current UNIX time stamp in seconds
$current_page = $_SERVER['REQUEST_URI']; // The page name
/*
If the users hasn't requested this page
in the last 10 seconds or if the user
comes from another page increment the
hit counter
*/
if(($now - $last_time) > 10 || $last_page != $current_page) {
/* INCREMENT YOUR HIT COUNTER HERE */
}
}
unset($_SESSION['hit_counter']); // Delete this hit counter session
}
// And create a new hit counter session
$_SESSION['hit_counter'] = array();
$_SESSION['hit_counter']['time'] = time();
$_SESSION['hit_counter']['page'] = $_SERVER['REQUEST_URI'];
}
?>
,因爲你只unset()
荷蘭國際集團命中計數器變量你永遠不會觸及任何其他會話變量。您不需要處理session_destroy()
,但是您需要確保在每個頁面的開頭都有一個session_start()
,您希望使用該功能。
您可以編輯腳本以不考慮時間if如果用戶來自您網站上的其他網頁,則只需計算點擊次數。
這是據我所知,這是一個對大多數網站具有合理安全級別的計數器。或者至少是一個好的開始。
有關PHP sessions的更多信息。
所以沒有其他辦法,生病嘗試在我的應用程序中考慮會話方式,並看看我能得到多少多少 感謝代碼示例的方式 – Darkc0d3r
不幸的是,由於HTTP是無狀態的(即每個請求都是新的且獨特的)。沒有其他方法可以知道請求來自誰。歡迎您:) – fimas
您可以添加一個安全措施,在會話var中添加一個字段,您可以在其中保存根據用戶信息創建的唯一散列。 '<?php $ _SESSION ['hit_counter'] ['user_hash'] = sha1($ _ SERVER ['HTTP_USER_AGENT']。$ _ SERVER ['REMOTE_ADDR']); ?>'。您可以將更多數據添加到哈希中以使其更加獨特。 – fimas
- 1. 防止刷新?
- 2. 防止刷新SSI
- 3. 防止父頁刷新
- 4. 防止Javascript頁面刷新
- 5. 防止HTML頁面刷新
- 6. 防止用戶刷新
- 7. 防止PHP腳本
- 8. 啓動/停止腳本刷新頁面
- 9. 防止多次執行Lua腳本
- 10. 防止自定義ListView刷新滾動。我想停止刷新
- 11. 防止客戶端腳本被重新註冊在後退按鈕或刷新
- 12. struts - 防止刷新重新提交
- 13. 刷新node.js腳本!
- 14. 如何防止多個加載PHP腳本調用JS腳本?
- 15. 如何防止腳本
- 16. signal.alarm防止腳本執行
- 17. 防止JS腳本執行
- 18. 防止被腳本抓取
- 19. 防止JavaScript GET和腳本
- 20. 使腳本刷新(自動刷新)
- 21. 防止URL地址欄,並防止使用jquery刷新頁面
- 22. 點擊選擇器可以防止頁面刷新,但能夠運行腳本
- 23. 如何防止瀏覽器刷新時重置計時器?
- 24. 如何防止頁面刷新時重置倒數計時器
- 25. 防止頁面刷新阿賈克斯
- 26. 如何防止在PropertyGrid刷新滾動?
- 27. 如何防止AppEngine memcache刷新
- 28. 如何防止頁面刷新?
- 29. 如何防止網頁刷新
- 30. 設置數據時防止listgrid刷新
IP,會話和cookie(標題數據)是您可以從用戶獲得的所有數據,它們都可以被刪除或僞造。它的最終用戶隱私和他們有權訪問它 –
在JavaScript中使用'localStorage'(在您使用Ajax調用PHP代碼之前...)。第一次你填寫'localStorage'並在你確認'localStorage'是否有舊數據=>什麼都不做 –
要添加到@ MohdMoe的觀點,引用數據(如你建議使用的)也可以僞造。您最好的選擇是使用會話數據,如果您相信您的用戶不會僞造統計信息,或者如果您不信任IP地址,請使用會話數據。 –