2012-03-12 17 views
0

私はCakePHPでデータベースセッションを使用しており、セッションと同じテーブルにユーザーIDも保存しています。ユーザーセッションが期限切れになったときに何らかの形で検出してデータベースの1つのフィールドを更新できるかどうかセッションタイムアウト時のcakephp更新フィールド

私は、ユーザーがウェブサイトから手動でログアウトしない場合(ブラウザを閉じるかどうかを問わず)、そのセッションをテーブルから削除できます。

+0

通常のセッションと同様に、データベースセッションはしばらくすると自動的に消去されます。それがタイムアウト*のポイントです。ここで手動で正確に何をしたいですか? – deceze

+0

それは私が思ったものです。私は "1"(中程度のセキュリティレベルで、私は信じている100秒のタイムアウト)のタイムアウトを持っています。私はログインしてセッションデータベースにレコードを見ることができます。私は、MySQL管理者からしばらく(30分以上)それをチェックして、ページをリフレッシュし、別の場所から同じユーザー名でログインしようとしましたが、そのレコードは削除されていません。私はデータベーステーブルを更新した後、最終的に削除されました。 – Albert

+0

私の質問は、どのようにセッションタイムアウトは実際にデータベースセッションで機能するのでしょうか?そのテーブルからレコードを削除するイベントを正確にトリガーするものは何ですか?ウェブサイトにアクセスする必要がありますか?または、セッションが終了したときに発生しますか? – Albert

答えて

0

セッションデータのクリーンアップは、ガベージコレクション(gc)に依存しています。このガベージコレクションプロセスは、PHPスクリプトの実行時にのみ呼び出されます。つまり、クリーンアップが可能なときにデータをクリーンアップするのではなく、別のPHPスクリプトが実行されている間にクリーンアップします。ガベージコレクションにはいくつかのリソースも含まれているため、毎回実行されるわけではありませんが、スクリプト呼び出しごとに実行される確率はあります。 The default is that gc runs about once every 100 script invocations.

これで、失効したデータはすぐに表示されなくなります。むしろ、それは最終的には掃除されるでしょう。

+0

これは、セッションが終了すると、セッションテーブルのレコードが最終的に削除されることを意味します。 – Albert

+0

はい、まさに正しいです。 – deceze

+0

クール、ありがとう! – Albert

関連する問題