2010-05-10 52 views
0

這個問題可能會暴露我作爲Web開發人員的無知,但現在對我來說這不會是一件壞事。ASP.NET或PHP:Memcached是否可用於存儲用戶狀態信息?

我有需要存儲用戶狀態信息。我需要爲每個用戶存儲的信息示例。 (定義用戶:未經身份驗證的訪問者)

  1. 用戶到達該網站從谷歌/冰/雅虎
  2. 用戶使用搜索功能(真/假)當前訪問
  3. 以前訪問過的產品頁面的
  4. 名單

這是我的理解,我可以將其存儲在視圖狀態,但這會導致頁面加載問題從最終用戶的角度來看,因爲大量的非可見信息正在傳輸即使服務器是唯一的一方,最終用戶也是如此需要信息。

在類似的說明中,我的理解是會話狀態可用於存儲此類信息,但這不會導致將相同的信息傳輸給用戶並存儲在其Cookie中? (不像視圖狀態那樣糟糕,但它感覺不太理想)。

這給我留下了一個僅服務器會話存儲系統或mem緩存解決方案。

memcached是唯一不錯的選擇嗎?

回答

1

項目1和2似乎是日誌記錄信息 - 即沒有明顯的要求將它們返回,除非你想保留它們的搜索條件。那麼把它寫到某個地方的日誌裏,忘記它吧?

我可以存儲這個視圖狀態

我猜這是一個asp.net的事情 - 當然,這並不意味着任何東西給我,所以我不能發表評論。

這是我的理解,會話狀態可以用來存儲這些信息

是 - 這將是我的首選存儲庫項目3

不,這也導致相同的信息被傳遞給用戶並存儲在他們的cookie中?

否 - 會話cookie只是PHP中存儲服務器端數據的句柄(以及我遇到的每個其他HTTP sesion實例)。

這給我留下裝有服務器只會話存儲系統或MEM-緩存解決方案

內存緩存是唯一真正使用任何會話存儲基板。

是否應該使用memcache作爲會話存儲基板....在單個服務器上,這裏沒有太多優勢 - 儘管NT(IIRC)使用固定大小的緩存/緩衝區(而Posix/Unix/Linux將使用所有可用的內存)除非你的站點超載,否則我仍然期望會話I/O的大部分內容是內存而不是磁盤。真正的好處是,如果你正在運行一個集羣(但在這種情況下,你可能想考慮像Cassandra)。

IME,會話沒有那麼大的開銷,但是如果你想在會話中保持活動的無限歷史,那麼你應該溢出數據(或保持它與會話分開),以防止它獲得太大了。

C.

+0

總之,您似乎建議使用會話狀態來存儲「會話」信息。有意義,但即使最終用戶只在其cookie中存儲標識符,這是否需要最終用戶啓用cookie以便我們將信息存儲在其會話狀態中?所有瀏覽器關閉cookies的用戶是否會失去用戶體驗? – 2010-05-10 15:23:23

+0

不,您可以通過URL傳播會話句柄 - 但確保始終填充正確的值非常困難。我會建議製作一些JavaScript來檢測cookie是否被禁用,並請用戶很好地啓用它們,如果他們不是。 – symcbean 2010-05-11 11:11:10

1

Memcached非常適合經常讀/寫很少的關鍵/值數據,它是名稱所暗示的緩存。例如如果您提供的產品信息很少發生更改,請將其存儲在memcached中,以免重複查詢數據庫以查找半靜態數據。您應該使用會話狀態來存儲您的信息,唯一會傳遞給來回的是會話標識符,而不是實際的數據,它們保留在服務器上。

+0

這是否需要最終用戶啓用cookie? – 2010-05-10 15:25:57

+1

這取決於你使用的是什麼框架, PHP和asp.net通過將會話標識符附加到URL上來支持cokiesless會話狀態。 – 2010-05-10 15:37:12

相關問題