2011-12-07 15 views
5

私は数量1のユニークなアイテムを持つカートアプリケーションを持っています1 - ユーザが他の誰かを買わないようにするために、在庫量を枯渇させる必要があります。問題は、買い物をしなくてカートを放棄すれば、商品を在庫に戻す必要があるということです。セッションが期限切れになったときにPHPを実行する

カートセッションが切れたときに在庫を補充する方法はありますか?すなわち、株式を置き換えるスクリプトを実行する。

+0

それはそうするのがちょっと奇妙なようです。たとえば、すべての商品をカートに追加することができます。あなたの通常のセッションが20分の場合は、20分間在庫がありません。誰かがチェックアウトしたときに在庫を取り除くだけの理由はありませんか?チェックアウトをクリックして在庫がまだ残っていることを確認することもできます。 –

+0

カートに入れるときには、実際に買ったときだけ在庫から取り除きません。 – Gumbo

+0

ありがとう、私は同意するが、それは私の決断ではない! –

答えて

4

session_set_save_handlerを使用すると、カスタムセッション処理クラスを作成できます。 これを実行すると、ガベージコレクタが呼び出されたとき、またはセッションが破棄されたときに実行する必要のある他のアクションを決定できます。ガベージコレクタを使用する場合は、session.gc_divisorsession.gc_probabilityの値も把握していることと、ガベージコレクタが実行される確率を設定することも理解してください。

+0

これは私たちがあなたに感謝のためにあります。 –

+0

@jimsmith私はそれが助けてうれしいです – mishu

0

セッションアクティビティ(例:sessions)を追跡するデータベーステーブルを作成します。その中に少なくともsession_idというフィールドと、last_activityというDATETIMEフィールドまたはTIMEフィールドを入れてください。

あなたがそうまだ持っていない場合、また(product_idquantityなど)カートの内容を保持し、session_idへのリンクを持っているcartsテーブルを作成します。

  1. ユーザーが注文を終了し、単に「ワイプ」そのセッションに属するcartsテーブルの行:次に、2つのシナリオがあります。
  2. ユーザーはカートを放棄して、last_activityの値がそれ以上(たとえば、1時間以上前)になっているかどうかを確認するcronジョブを呼び出します。そのスクリプトがカートに入っていた数量であなたの供給を再在庫するようにします。

ブートストラップ/ローダー(読み込まれたすべてのページでトリガーされるメカニズム)のlast_activityフィールドを更新する必要があることに注意してください。

1

cronジョブが不要になるようにするには、それをシンプルに保つ:「かごの中のオブジェクトを配置する」ための

  1. ユーザーピック彼/彼女のバスケットにオブジェクトを配置
  2. タイムスタンプは、データベースに格納され、タイムアウトタイムスタンプがあまりにも保存されています。例えば(time() + (60*20))
  3. ユーザーは、あなたがタイムアウトタイムスタンプが現在のタイムスタンプよりも小さいかどうかを確認するために、単純なmysqlのクエリを実行するすべてのページロードでは、Webページ
  4. を閉じます。クエリが結果を返す場合は、バスケットから削除してスロットに戻します。

かなりまっすぐ進むであるべき

(これは、あなたも、データベース内の「最後のアクティビティ」のいくつかの並べ替えを更新することが必要です)。

関連する問題