0

Cookie または PHP セッションを介して (ログインしていない場合でも) ユーザーが保持するショッピング カートを開発しています。usersそのため、ログインしていないユーザーがサイトにアクセスするたびにテーブルに新しいレコードを作成し、cartsそのcarts_itemsユーザーがカートにアイテムを追加したときに新しいレコードを作成します。

これらのユーザーの多くは戻ってくることはなく、Cookie は期限切れになり、人生は続きますが、これらのテーブルには役に立たないレコードが入力されます。

問題は、これらの期限切れの Cookie データを取り除く方法です。

4

2 に答える 2

2

PHP セッションを再発明しているようです。カートのアイテムをデータベースから切り離し、代わりにセッション配列に入れることをお勧めします。セッションを必要なだけ継続するように構成できます。

カートのアイテムを長期間保持することには欠点があります。製品の変更/削除などです。すべてのカートのアイテムがまだ有効であることを定期的に確認する必要があります。

カートの商品をデータベースに保存する必要がある場合は、ページ ビューごとにタイムスタンプを使用してユーザー レコードを更新する必要があります。これを使用して、X 日前のタイムスタンプを持つユーザーと関連するカート項目を削除する cron ジョブ/スケジュールされたタスクを作成できます。

Cron は Linux/Unix の機能で、設定した時点でタスクをスケジュールできます。たとえば、毎日午前 2 時にクリーンアップ スクリプトを呼び出す場合、cronjob は次のようになります。

* 2 * * * /path/to/php -q /path/to/script.php >/dev/null

ウィキペディアから:

*    *    *    *    *  command to be executed
┬    ┬    ┬    ┬    ┬
│    │    │    │    │
│    │    │    │    │
│    │    │    │    └───── day of week (0 - 7) (0 or 7 are Sunday, or use names)
│    │    │    └────────── month (1 - 12)
│    │    └─────────────── day of month (1 - 31)
│    └──────────────────── hour (0 - 23)
└───────────────────────── min (0 - 59)

より詳しい情報

于 2012-12-11T16:08:40.870 に答える
1

cronジョブを使用すると、期限切れの不要なレコードを削除できます。例えば:

$lastWeekStart = strtotime('-1 week');

およびSQLクエリは次のようになります。

DELETE FROM users WHERE is_not_login = 1 AND updated_at < $lastWeekStart

このスクリプトは週に1回実行します。

于 2012-12-11T16:02:14.787 に答える