2012-04-15 81 views
1

通常,當我開發與客戶端交互的網站時,我曾經使用他們的用戶名或用戶ID來保存他們的配置等等。但現在我正在開發一個沒有登錄系統的網站,我需要保存一些東西,比如「喜歡」,「訪問頁面」等等。如何爲沒有用戶名的用戶創建一個唯一的ID - PHP

我試過互聯網協議(IP),但當訪客在NAT或代理服務器下時,它不會工作。

如何爲每個用戶創建一個唯一的ID並將它們保存在我的數據庫中?

順便說一下,我使用PHP。

+1

您的網絡服務器是否分配了一個跟蹤cookie?使用該cookie的值作爲佔位符用戶名。例如Apache的mod_usertrack? – 2012-04-15 04:48:14

回答

2

如果您試圖長期保存用戶數據,這聽起來像是一場災難。

我會建議:

  1. 創建一個隨機的,但唯一的哈希並保存到數據庫中。
  2. 將散列設置爲用戶計算機上的cookie。
  3. 保存所有'喜歡','訪問過的頁面'等。到鍵入散列的數據庫。

問題出現在用戶清除其瀏覽歷史記錄/ Cookie後,現在無法檢索該用戶的活動,因爲它都基於該散列。

我想一個解決方法是發送一封電子郵件給用戶使用他們的散列並告訴他們如何重新初始化他們的活動歷史。

你將不得不創建一個特殊頁面,他們可以輸入他們的散列,你的系統會重置他們的系統上的cookie。

1
do { 
$uniqueID = uniqid(); 
$exists = mysql_num_rows('SELECT * FROM table WHERE id = $uniqueID'); 
} while ($exists == 1) 

我正在使用類似的代碼來生成唯一的ID,它對我來說工作正常。或者,爲了使它更簡單,你可以使用uniqid()函數,它不應該真的產生兩個相同的結果。

+1

您需要在查詢字符串周圍使用雙引號才能使其工作。因爲它是變量$ uniqueID不會被擴展。 – vascowhite 2012-04-15 06:33:40

2

您應該使用Cookie,IP和會話組合。

+0

更好的是,使用Unix時間戳並在最後添加一個隨機數。除非成千上萬的人加入,否則永遠不會有重複。 – scottcarmich 2012-04-15 07:21:51

相關問題