2011-05-11 69 views
6

我目前正在開發Symfony2應用程序,該應用程序不僅會接受 用戶註冊,而且會允許訪問者在不創建帳戶的情況下通過幾乎整個流程的網站 或。在登錄的設計思路看起來像這樣(建議/改進歡迎):將數據存儲在「匿名」用戶上

  1. 當用戶登錄到他們的賬戶,數據將被保存到用戶/相關實體爲正常
  2. 當匿名用戶首次點擊該網站,爲他們創建一個「匿名用戶實體」,就好像他們已經註冊一樣,但是有一些像USER_<session_id>作爲標識符而不是個性化用戶名。他們在網站上進行任何活動持續至匿名用戶實體
  3. 當匿名用戶選擇登記,他們的匿名用戶實體升級爲註冊用戶實體,保留他們的數據以備將來使用
  4. 如果一個匿名用戶在沒有註冊的情況下離開網站,應該在一段時間後清除匿名用戶實體以防止死亡數據的積累

什麼是最好的方式去做到這一點?具體來說,爲匿名用戶創建/操作用戶實體,而不必將代碼放置到每個控制器中被認爲是「最佳實踐」?

回答

0

我有與此類似的,我必須做點什麼。我所做的是收集匿名用戶的IP地址(使用($ _SERVER ['REMOTE_ADDR']))。然後我使用該IP地址進行跟蹤。然後,您可以在註冊後將其過去的用法追加到他們新創建的帳戶中。

然後,您可以只運行一個簡單的查詢放棄已經有一段時間沒有活動過任何IP地址(大多數用戶dymanic IP地址,所以它會改變每隔一段時間反正)。

+0

好主意,謝謝! – Problematic 2011-08-03 14:41:29

+0

想到這裏,也有一些漏洞:NAT問題,如@emilecantin指出,而且問題移動用戶,誰就能在很短的時間(通過WiFi熱點移動,例如)迅速改變IP地址。 – Problematic 2011-08-03 17:52:40

+2

我絕對不會使用這種方法。在一個IP地址(例如,從工作計算機訪問您的網站的人員比在數百臺計算機中共享或幾個IP地址的人們)有很多不同用戶會話的實例。您需要在Cookie中使用唯一的ID。 – 2012-02-15 05:54:23

4

我建議不要使用IP地址對於這一點,因爲它可能會給後面的NAT用戶的問題。 使用自定義cookie或sessionId(PHPSESSID)cookie作爲跟蹤目的的標識符將是一個更好的主意。 Google在其廣告業務中使用此策略。站在巨人的肩膀上!

+0

這是類似於StackOverflow的解決方案(據我瞭解,你不需要註冊提問)? – Problematic 2011-08-03 17:54:31

+1

不,StackOverflow似乎使用某種OpenId。它允許用戶跨多個站點只有一個ID。 Google的認證實現了OpenId。不過,我不太確定Facebook。 – emilecantin 2011-09-22 14:17:12

+0

我明白了註冊用戶的功能,但沒有註冊的用戶可以在網站上參加爲好,他們的問題是在每個用戶的基礎上跟蹤(部分資料說「未註冊的用戶」)。我假設你的解決方案與他們的做法相似。 – Problematic 2011-10-19 15:28:12