2010-12-12 28 views
1

私はセッションクラスを構築しており、データベースの期限切れセッションを処理する方法が不思議でした。私は乱数を投げることを考えていました。例えば1と1000の間であり、1であれば期限切れのセッションをすべて削除します。期限切れのセッション:ランダムに削除する必要がありますか?

私は期限切れのセッションを削除する必要があるかどうかを確認するために、これはデータベース内のファイルまたは別のテーブルを読み取るよりも速くなると思います。しかし、私は訪問が多いときにこれがうまくいくかどうか分からない。乱数の範囲を広げることができますが、ランダム性によっては気分が良くなりませんので、これが道のりであるかどうかはわかりません。

確かにcronは良いでしょうが、私はそれが自動的に十分であることを望んでいました。

答えて

1

ランダムを使用しないでください。 cronジョブを使用するのが最善です。

ランダムまたは任意の格納された値を使用して定期的に要求すると、その要求のセッションをクリアするオーバーヘッドが発生します。あなたの訪問者はこれにより突然の遅延を経験するかもしれません。

このようにする必要がある場合は、まだランダムを使用しないでください。最後のクリーンアップ時間をデータベースに書き込み、それを読み取って次のクリーンアップの時間であるかどうかを確認します。結局のところ、各要求はおそらく何らかのデータベースのやり取りを必要とするため、1つの行と1つの列だけを持つ必要があるテーブルから日付値を取得するこの単一のクエリは何の違いもありません。すべてのリクエストにデータベースが必要というわけではない場合は、このチェックを行うリクエストのみに制限することができます。

しかし、私が言ったように、むしろやっていないだけで、クーロンジョブを使用してください。

1

私は似通った問題を抱えていましたが、私はcronジョブを使用したくない/使用できませんでした。私の解決策は、セッションクリーニングを行う新しいPHPページを作成することでした。

ユーザーがサイトにアクセスしてセッションクッキーを消去するときに、そのページにAJAX要求が行われます。この方法では、ユーザーは遅延を経験しません。

ただし、これを安全にするには、クリーニングページコールごとに1回使用のSIDを保存する必要があります。

+0

おかげさまで、ありがとうございます。 – HappyDeveloper

+0

期限切れのセッションをクリアする時期はどのように分かりますか? – HappyDeveloper

+0

セッションをクリアした最後の時間を保持するために、データベースにテーブルを作成することができます。ページが読み込まれるたびに、その時刻からX秒経過したかどうかを確認できます。私は非常に各ページの負荷のためのオーバーヘッドを作成するので、cronを使用することをお勧めします。 –

関連する問題