2011-09-19 36 views
0

我目前正在爲電子商務網站構建一個購物車,並且想知道在結帳過程中堅持用戶數據在會話中的最佳方式。電子商務會話數據持久性

用戶流量的工作如下:

購物車 - >登陸/註冊 - >選擇送貨地址 - >確認 - >工資

我的問題是,一旦用戶登錄,我想顯示他們的送貨地址列表,以便他們可以選擇一個。最簡單的方法是通過用戶的ID查詢模型,但我擔心的是安全問題 - 我的第一個想法是將用戶ID存儲在會話中,然後使用它來檢索地址。然而,沒有什麼能夠阻止另一個用戶潛在劫持這個ID(僅僅通過猜測隨機數字)並且揭示其他用戶的地址。我可以使用他們的電子郵件地址,但這也可能被猜到。我最好使用這兩者的組合,還是有更好的方法?

+0

如果您的會話ID都很弱,很容易被猜到的,那麼你的店不應該擺在首位存在。 PHP的默認會話ID是隨機的32個字符的字母數字字符串,並不是一成不變的。 –

回答

0

PHP具有內置會話功能。它爲瀏覽器加載一個獨特的cookie,並允許您通過$_SESSION陣列將所有會話數據保留在服務器端。 Cookie ID對會話是唯一的,而不是用戶,因此每次用戶登錄時Cookie都會更改(如果Cookie已過期)。如果您使用https進行會話,它非常安全。如果沒有https,會話容易受到某些具有(特殊)知識並且傾向於截獲cookie數據的人,但這樣的截取並不容易。根據如何保證您的安全,在沒有https的情況下運行可能會或可能不會被您接受。

您可以在此處詳細瞭解PHP會話功能:

http://php.net/manual/en/features.sessions.php

+0

謝謝你們兩位。我錯誤地理解了$ _SESSION cookies的工作原理,我認爲數據存儲在cookie中,而不僅僅是會話ID。我在搜索我的機器時發現了會話數據,使我更加困惑,但是現在我意識到這是存儲在我的xampp localhost中的相應服務器端數據! – baseten

+0

要清楚,如果您創建自己的* cookies,您*可以*將會話數據*存儲在cookie中。但這不是PHP Sessions的做法。它們存儲服務器端的所有內容,並在Cookie中放入一個唯一的ID。客戶端在請求中提供cookie數據(會話ID),然後服務器能夠訪問'$ _SESSION'數組中的正確會話數據。 –