2016-03-21 33 views
0

我喜歡得到指紋作爲PHP變量,我得到的後續,但不想工作。fingerprintjs2到PHP變量

<p>fingerprint2: <strong id="fp2"></strong></p> 

<script src="/fingerprintjs2/fingerprint2.js"></script> 
<script> 
    var fp2 = new Fingerprint2(); 
    fp2.get(function(result) { 
     console.log(result); 
     $("#fp2").text(result); 
    }); 
</script> 

$myphpvar = "<script>document.write(fp2.get());</script>"; 

echo $myphpvar; 

回答

0

Javascript在PHP完成後運行。客戶端VS服務器端代碼。我通過在呈現圖像的PHP文件中運行PHP解決了這個問題。這種方法通常稱爲像素跟蹤。

這裏是基礎知識,你需要在Javascript通過您的變量來呈現圖像的PHP文件:

document.write("<img src=fingerprint.php?x="+x+"&y="+y+" width=1 height=1>"); 

在它通過的Javascript變量x和y的PHP像上述情況。

然後fingerprint.php腳本的樣子:

<?php 
    header("Content-type: image/png"); 
    session_start(); 

    $x = $_REQUEST['x']; 
    $y = $_REQUEST['y']; 

    $_SESSION['x'] = $x; 
    $_SESSION['y'] = $y    

    // SHOW THE IMAGE 
    $im  = imagecreatefrompng("fingerprint.png"); 

    imagepng($im); 
    imagedestroy($im); 

    ?> 

PNG圖像可以是你想要的,因爲它只會是你的最後一個屏幕上的1×1的圖像什麼。你現在在你的PHP中有Javascript變量。隨着代碼啓動會話,您可以將變量寫入會話並稍後在另一個腳本中收集它們,或者將它們寫入數據庫並稍後恢復。試試我的簡單例子,以確保你有它的工作,然後從那裏擴大。

+0

如果你有更多的代表,我會低估這一點。很少有很好的理由使用document.write,在這種情況下,它需要在執行之前阻止下載並執行復雜的JavaScript代碼。 – symcbean

0

這實際上不是PHP如何工作的。 PHP無法處理客戶端JavaScript。如果你想在PHP中訪問客戶端信息,那麼你應該把它放在一個表單中,並將它發佈到PHP中的另一個頁面。 PHP表單上有很多很好的教程,例如this one

+0

是的,我知道,可以發送POST,但不希望以這種方式通過網絡發送。 – Theo

0

有很多的方法可以通過JavaScript將數據發送回服務器端

  • 設置一個cookie,並在接下來的請求
  • 請求通過注入一個腳本/ IMG/iframe標籤的內容中讀它(但不使用document.write)將指紋url中的查詢
  • 使AJAX請求
  • 一個隱藏的輸入添加到頁面上的表單 - 要求用戶使用表單
  • 導航離開頁面