簡體   English   中英

在Ajax調用中指定用戶代理,如何正確執行?

[英]Specify User Agent in Ajax call, how to do it the right way?

我正在用PHP和Ajax編寫我自己的實時訪客計數器。

一切正常,但是有一個小問題,就是每次進行ajax調用都被視為一次額外的訪問。 我知道如何根據用戶代理(例如漫游器等)對特定的訪問者進行排序,因此,如果我只能在ajax調用中指定用戶代理,那么我應該能夠使ajax調用本身不算作訪問。

現在,這是我的問題,如何通過Ajax調用正確指定用戶代理? 在這種情況下,我想將用戶代理指定為“ googlebot”或類似名稱。

這是我工作的ajax代碼:

<script type="text/javascript">
var interval = 5000;  // 1000 = 1 second, 3000 = 3 seconds
function doAjax() {
    jQuery.ajax({
            type: 'POST',
            url: '/codes/LiveVisitsStats/postlivecounter.php',
            data: jQuery(this).serialize(),
            success: function (data) {
            var arr = data.split('|');
                    jQuery('#counterint').html(arr[0]);
                    jQuery('#extrainfoscounter').html(arr[1]);
            },
            complete: function (data) {
                    // Schedule the next
                    setTimeout(doAjax, interval);
            }
    });
}
setTimeout(doAjax, interval);
</script>

一些額外的信息/說明。跟蹤代碼本身可以完美運行。 問題僅存在於前端UI中,其中使用ajax動態顯示統計信息,因為每次ajax調用更新頁面上的統計信息時,它還會增加當前用戶的訪問計數,而當前用戶查看的是由ajax驅動的UI。

不知道PHP,但是在C#中,這就是我從jQuery確定它是否為AJAX的方式:

if (Request.Headers["X-Requested-With"] == "XMLHttpRequest"){
    // this is AJAX
}

因此,如果上述情況為true ,則可以避免更新數據庫。 我確定您知道PHP中的等效語言。

一切正常,但是有一個小問題,就是每次進行ajax調用都被視為一次額外的訪問。

(某種程度上)更好的解決方案是使用某個值使用戶可識別。 我建議餅干。

  • 在頁面加載時生成一個包含唯一值(例如某些UUID之類)的cookie。
  • 確保Cookie在不久的將來過期
  • 如果該cookie已經存在,請保留它。

每次用戶向服務器請求時,cookie都會隨身攜帶。 服務器可以使用該值來標識用戶。

我發現ajax調用實際上並沒有引起訪問點擊。 流氓命中計數來自CMS系統中的另一個組件,我通過調整核心引擎以在用戶重新加載同一頁面時忽略計數來解決此問題。 很簡單

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM