2012-09-11 34 views
1

我想弄明白oldnavy.ca上的單頁結帳系統。持久數據只能使用會話變量來實現嗎?

如果你可以花時間把一些東西扔到購物車中,並弄亂周圍,看看它是什麼樣子,我將不勝感激。

讓我感到困惑的是刷新頁面會保存進程的當前狀態。所以,如果你創建你的登錄名並添加你的送貨地址,它將在那裏,如果你點擊刷新。

閱讀很多文章聽起來像使用會話變量來存儲大量數據不被認爲是很好的編程。現在,是存儲表單數據,如航運信息等......認爲「很多」的數據?

我只是好奇地想知道他們是如何實現這個購物車系統的,因爲它在各地都有使用,而且我不想在會話變量使用的情況下不願意使用它。

也許有替代品在使用?

謝謝

+0

他們不一定在SESSION中存儲所有內容 - 他們可能會在其中存儲唯一的ID,並將所有內容添加到數據庫中。但是,確定它們是如何處理它的方法並不是真正的方法 - 從最終用戶的角度來看它是一樣的。 – andrewsi

+0

將它直接存儲到數據庫會更有效率嗎?他們將不得不在會話過期時手動從數據庫中刪除數據。 – Adam

+0

如果他們這樣做,他們會定期運行一些內容並清理尚未更新的會話 - 磁盤空間很便宜,並且在半夜運行批處理作業不會是大多數用戶注意到。 – andrewsi

回答

0

有沒有這個,只有指導方針的硬性和快速的答案。

如果您使用標準的PHP會話,它們將被保存在服務器磁盤上的純文件中,每個活動會話一個。這也意味着在每個頁面載入時,相關會話文件被從磁盤讀取到內存中。 「太多」多少取決於很多因素......

  • 需要多長時間從磁盤讀取文件到內存中?
  • 磁盤緩存可以防止每次物理磁盤訪問,但文件越大,磁盤緩存中的文件越少
  • 在RAM中佔用多少內存?
  • 將數據序列化並將其寫回磁盤需要多長時間?
  • 你有多少併發用戶需要PHP來讀取和寫入磁盤?
  • 活動會話有多長時間,即多少會話文件在被垃圾回收之前會在磁盤周圍散落?

對於典型的小型網店(不是Amazon尺寸),答案是基於文件的會話通常非常好。您可能會在每個文件中存儲幾十KB的數據,這足以保存用戶的地址數據和購物籃。你很難遇到這個問題。

另外還有簡單的其他會話處理程序。您可以將它們保存在memcache存儲或數據庫中,這可以緩解許多基於文件的問題。評估哪種解決方案更適合您的情況。

+0

所以替代方法是保存會話ID並將所有關聯的數據都存儲在數據庫中?我的下一個問題是如何在會話過期時刪除這些數據?我的購物車的體積很小,因此Sessions對我來說可能更容易。 – Adam

+0

會話只是一個具有唯一ID和* some *服務器端機制的cookie,用於將數據存儲在與該id關聯的某個位置。如果你想使用基於非文件的會話存儲,請查看['save_handler'](http://php.net/manual/en/session.configuration.php#ini.session.save-handler)。刪除數據是所選會話處理程序的垃圾收集週期的一部分。 – deceze