2015-10-06 74 views
-1

我有一個持有shopping cart類型的信息,像這樣enter image description here如何用戶不活動,註銷或會話結束

我設置processing= true而我得到的支付信息,並與registered一起算來透視表後清除數據庫字段因此庫存不會因同時購買而超賣。如果付款失敗,我可以設置processing=false

但是,在我沒有完成付款處理的情況下......當用戶註銷,超時或結束他們的會話或任何其他情況時,如何將processing重置爲false?

+0

捕獲該會話中的任何變量。而且,無論何時您要求會話超時或每當用戶結束他們的會話時......在sql查詢中使用該變量來使處理爲假。 –

+1

註銷是一個possitive事件,所以你可以捕捉,但超時不是一個積極的事件。例如,您必須編寫一個cron,它運行每個'session_timeout + X'來清理所有丟失的會話並返回庫存 – RiggsFolly

回答

1

根據用戶的活動,你可以做以下的:

  1. 設置會話變量,並保持的時間軌跡,如果時間過期,然後將該值設置爲false
  2. 當用戶斷開連接時設定值爲假
  3. 根據您使用的數據庫,您可以添加一個定時事件以將該值設置爲false。
+0

第1點不起作用,會話處於活動狀態或會話數據丟失,請參閱@ RiggsFolly的評論以上。即使使用比會話超時短的超時,也無法確定會話超時內是否會發生其他請求。請改正。 – syck

+0

但是,您可以使用JavaScript在指定的時間回撥服務器; JavaScript本身也可以攜帶sessionID或任何其他ID。但是,如果JavaScript沒有啓用,那麼這將不起作用,因此不應在付款環境中使用,或者僅當您未啓用JavaScript時完全排除付款。 – syck

+0

我認爲2.和3.在一起對大多數情況下這個問題是一個很好的解決方案。我會試試看。 – Phil