2011-07-19 37 views
0

我正在實施一種機制,其中每個來我們網站的用戶都會在前3次顯示特殊的啓動畫面,然後再不會再次顯示。跟蹤用戶登錄的次數?

我可以想到以下方法 - 從降低總體成本(就服務器負載而言,無論是處理速度還是數據庫負載)而言,「最佳」方法是什麼。

A. Having another field in the users table which keeps count 
B. Keeping the users which are at different 'states' in different tables 
    (yeah - doesnt make much sense to me either) 
C. Keeping count via a cookie at the client end 

還有什麼可能嗎?

回答

0

就服務器/數據庫負載而言,在cookie中記數很容易成爲最佳選擇。不利的一面是,如果用戶清除或禁用他們的cookies,他們將再次看到啓動畫面。

然而,大多數用戶並沒有經常清除cookie,所以我建議採用混合方式。使用cookie來保持計數,但也會在數據庫中添加一個標誌。只要cookie中的計數達到3,就可以設置數據庫標誌。這樣,如果用戶在達到所需的計數後清除cookie,則仍然可以記住由於該標誌而不顯示啓動畫面。

如果用戶在達到第三計數之前清除了他們的cookie,他們仍然會看到飛濺3次。但是由於用戶不知道飛濺應該顯示多少次,並且由於他們從未達到飛濺將停止顯示的狀態,所以從他們的觀點來看,體驗仍然是一致的。只要他們將cookie保持足夠長的時間以使計數達到3,啓動屏幕停止,並且它們保持停止。

+0

我很疑惑爲什麼人們推薦混合方法,在數據庫中有一個'標誌' - 如果我必須在每次用戶登錄時進行數據庫檢查,我在這種情況下創建了等量的負載當我在數據庫中保持計數.. @aroth –

+0

@Alan - 當用戶登錄時,是不是從數據庫中提取用戶的記錄呢?如果你是(並且我沒有看到登錄是否可以工作),那麼在那裏擁有標誌(甚至計數)實際上不會增加​​額外的負載。該標誌只比計數稍微有效,因爲它只設置一次而不是3次(或者如果您始終增加計數器,則設置爲n次)。 – aroth

+0

夠公平了! –

0

客戶端(cookie)上的跟蹤是最好的方法,因爲您沒有訪問數據庫並且沒有安全或可靠性問題。 輕微的挑戰將是如何檢測用戶是否已經開始「會話」。也就是說,用戶輸入頁面A(遞增登錄計數器cookie),然後進入頁面B,然後再次進入A.你應該確保訪問的唯一性;你不希望櫃檯再次增加。實現此目的的一種方法是使用第二個cookie標記訪問,其expires值未設置,因此在關閉瀏覽器時會過期等。

可以,作爲一個「備份」的措施,國旗在數據庫中的事實,即用戶已經達到了第三次,然後可以容錯至於改變瀏覽器,清除Cookie等

+0

我很疑惑爲什麼人們推薦混合方法的'在你的數據庫中的標誌' - 如果我必須進行數據庫檢查每次用戶登錄時,我創建一個等量的負載在數據庫中保持計數的情況下。@Ofer –

+0

1)對數據庫執行一次UPDATE命令不像執行3次命中。 2)我不是說混合方法是最好的。我解釋了客戶端的態度,我只是說你可以使用一次性UPDATE進行備份,以便在多個瀏覽器中安全,刪除cookie等。 –

0

使用cookie將導致計數器被重置每次用戶改變瀏覽器,計算機(或移動設備,平板電腦等)的時間,其清空餅乾,切換到無痕模式,等等,等等

除非您將用戶名粘貼到cookie名稱中,同時也會將多位用戶使用同一瀏覽器的訪問計爲單個用戶。

如果你想跟蹤每個用戶,那麼你需要在你的服務器上跟蹤它。