ユーザーが製品を注文できるウェブサイトを書いていますが、問題は、ユーザーがログアウトしたり、ブラウザを閉じたりしても、5 分後に製品が自動的にチェックアウト (MySQL クエリを含む PHP スクリプトを実行) する必要があることです。これに似ています。これをコーディングするにはどうすればよいですか?
7 に答える
チェックアウトする製品に関連する情報をデータベースに保存します。毎分実行される cron ジョブは、5 分前の製品のチェックアウトを引き起こします。
これが私がすることです。私が知る限り、MySQL は時間遅延を持つことはできません。ステートメントを実行および実行する cron ジョブを使用できます。私がすることは、ショッピング カート テーブルに追加のフィールドを作成し、将来のチェックアウト時間を設定することです。サーバー上で毎分実行される cron ジョブを作成します。そのcronジョブに、チェックアウト時間が現在の時間よりも短いショッピングカートのクイックポーリングを実行させます. 見つかった場合は、そのカートでチェックアウト手順を実行し、それを削除するか、チェックアウト済みとしてマークして、再度チェックアウトしないようにします。
何も提供していないため、サンプルコードを提供することはできませんが、これは少なくとも出発点を提供します.
これは繰り返し自動化されたタスクであるため、cron またはその他のタスク スケジューラを設定する必要があります。大雑把に言えば、これがどのように機能するかです:
ユーザーが商品をショッピング カートに追加すると、商品はチェックアウトされていないことを示すフラグと db/shopping cart への追加のタイムスタンプとともにデータベースに入ります。
ユーザーがブラウザから商品を明示的にチェックアウトした場合、このフラグは同じことを反映するように更新されます。
cron は 1 ~ 2 分ごとに起動し、チェックアウト フラグが更新されずにショッピング カートに追加され、5 分以上前に追加されたアイテムのタイムスタンプをこのテーブルでチェックします。
そのような製品をチェックアウトし、フラグを更新します。
cron が同じことをしている間にユーザーが手動でチェックアウトした場合などの状況に対処するために、このフローをさらに微調整する必要があることに注意してください。
しかし、一言で言えば、これが私が問題に取り組む方法だと思います
お店に行くのと同じような体験をしたいという人はいるのではないでしょうか?
物を拾ったり、さまようように。
もしかして、あの人はカゴをカウンターに置いておくことにしたのでしょうか?必ず一定期間商品を提供し、時間切れであることを伝えます (または X 分以内に購入する必要があります)。
では、なぜ自動チェックアウトのようなものなのでしょうか?
何かを買わないことを決めた人に対して悪い評判を望まず、現金を受け取っていると仮定しますか? おそらく、その人のインターネット接続が切れた/ラップトップの電源が切れた/...?
彼らがチェックアウトを通過するようにしてください.
ユーザーがページを離れる場合は、ページを要求したと思います (cron ジョブのように自動的に実行されませんでした)。
php の通常の動作は、この間に usr が離れた場合でも、スクリプトを完全に実行することです。
この種の検証に 5 分という時間は短すぎると思いますが、5 ~ 10 分ごとに php スクリプトを実行する cron ジョブを用意して、ユーザー アクティビティの最後の日付と最後の (未完了の) 注文を検証する必要があります。日付が実際の日付time()
から 5 分を引いた値よりも小さい場合は、そのユーザーのエントリをデータベースから削除する必要があります。
検証は、既存のすべてのユーザーに対してではなく、注文テーブルから行う必要があります。
ただの怠惰ですが、このショッピング体験は 1 回限りの製品 (骨董品など) のためのものですか、それともありふれたもの (食料品など) のためのものですか?
前者ではなく後者の場合、なぜ気にする必要がありますか? 確かに良い店は補充して、その特定の製品を特定の価格で販売することができます. 前者の場合はオークションが必要です。