[請益] 如何避免同時訂購問題?

看板PHP作者 (我的生命因你而發光)時間15年前 (2010/03/11 14:55), 編輯推噓4(4025)
留言29則, 7人參與, 最新討論串1/1
假設像博客萊購書,某本書只剩下一本 A使用者加入訂購,session存在此筆資料 但前台在還沒結帳之前,還是呈現還剩一本 B使用者也於是去訂購,那麼假設B提前結帳 A使用者結帳時後不就還要再做一層判斷,看是否還有庫存 只是會導致A覺得剛剛有庫存,已經訂購了,但結帳卻沒有此筆資料 因此想問看看有沒有方式可以避免呢? 另外一個問題雖然發生機率少,但還是會發生 也就是假設多個使用者"同時"按下結帳,那麼是會產生重複的訂單嗎? 這樣不就會導致販賣的商品不夠了 這樣問題該如何預防呢? 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.228.39.126

03/11 15:06, , 1F
要有顯示最新庫存量的功能、並且提醒預訂的書本已經沒有
03/11 15:06, 1F

03/11 16:13, , 2F
有人訂購時就先把庫存減一?他如果沒結帳再加回去?
03/11 16:13, 2F

03/11 16:14, , 3F
(我亂想的)
03/11 16:14, 3F

03/11 17:08, , 4F
樓上,假設那個人訂購,然後過一陣子再去結帳或者取消
03/11 17:08, 4F

03/11 17:08, , 5F
這樣會造成一些問題吧?
03/11 17:08, 5F

03/11 17:19, , 6F
2f的方法+timeout
03/11 17:19, 6F

03/11 18:53, , 7F
所以這真的是亂想的。要看人家真正的商務運作怎麼處理。
03/11 18:53, 7F

03/11 19:44, , 8F
完成結帳前後台再去比對庫存量夠不夠,夠的才真正下單,最
03/11 19:44, 8F

03/11 19:45, , 9F
後再列出下單結果讓使用者確認,這樣應該可以吧
03/11 19:45, 9F

03/11 19:47, , 10F
即使2f的方法+timeout,如果使用都直接離開或關閉網頁的話
03/11 19:47, 10F

03/11 19:48, , 11F
可能還是會有問題吧?
03/11 19:48, 11F

03/11 19:48, , 12F
               ^^者
03/11 19:48, 12F

03/11 20:51, , 13F
user要結帳以前先檢查所有已訂購但未結帳的訂單…
03/11 20:51, 13F

03/11 20:51, , 14F
其實只要「剩下件數」不公布給user知道就行了 :-#
03/11 20:51, 14F

03/12 14:13, , 15F
timeout的問題丟給另一個背景程式去檢查, 只要使用者下
03/12 14:13, 15F

03/12 14:13, , 16F
訂單就塞一個紀錄在DB裡面, 完成訂購在清除 然後程式去
03/12 14:13, 16F

03/12 14:14, , 17F
check那個紀錄超過時間就刪除
03/12 14:14, 17F

03/15 03:43, , 18F
我也覺得2F+timout~
03/15 03:43, 18F

03/15 03:44, , 19F
這樣等於下單時先鎖住這"1"筆資料~避免被其他使用者使用
03/15 03:44, 19F

03/15 03:45, , 20F
如果使用者超過付帳的期限~則再將這"1"筆資料加回來
03/15 03:45, 20F

03/15 03:46, , 21F
如此不會發生幽靈訂單
03/15 03:46, 21F

03/18 10:36, , 22F
2F+timout~這樣會不會發生購物版的DoS @@a
03/18 10:36, 22F

03/18 10:37, , 23F
就來個程式~等timeout就馬上再下訂庫存量,然後都不結帳
03/18 10:37, 23F

03/18 10:43, , 24F
"大部份"的清況貨沒了,只要落差不大還可以調
03/18 10:43, 24F

03/18 10:43, , 25F
系統都是下訂檢查一次,結帳前檢查一次
03/18 10:43, 25F

03/18 10:47, , 26F
如果訂單一定不能超過庫存,可以試試下面這個方法
03/18 10:47, 26F

03/18 10:48, , 27F
下訂(檢查)=>結帳前(檢查)=>扣庫存=>再檢查一次
03/18 10:48, 27F

03/18 10:50, , 28F
扣完庫存再檢查時,如果庫存變負的,訂單自動失效
03/18 10:50, 28F

03/18 10:52, , 29F
即使是同時下訂,也會有前後,看誰先結帳囉!
03/18 10:52, 29F
文章代碼(AID): #1Bc9FNhV (PHP)
文章代碼(AID): #1Bc9FNhV (PHP)