11

たとえば、ユーザーが私のWebサイトで何かをしたとします。たとえば、いくつかの画像などをアップロードしましたが、ログアウトせずに離れて戻ってこなかった、または数か月後に戻ってきたとしましょう。

だから私の質問は、たとえばセッションの期限が切れた後、たとえば30分後にアップロードされたファイルを削除する方法があるので(ユーザーがページをリロードしないことに注意してください)、サーバー側で完全に実行する必要がありますユーザーがまったく干渉することなく。

編集あなたの素晴らしい答えをありがとうございました、それは私にかなりの数の素晴らしいアイデアを与えました、私はあなたの答えのすべてを受け入れることができたらいいのにと思います:)

4

3 に答える 3

6

良い質問!私の最初のアイデアは、データベースベースのソリューションを使用することでした。まだ行っていない場合は、テーブル内のすべてのアクティブなセッションを追跡します。このテーブルには、特に、とsessionsが必要になる場合があります。このエントリは、ユーザーがサイトにアクセスするたびに更新されます。session_idlast_visited_time

UPDATE sessions WHERE session_id = "<current session id>" SET last_visited_time = NOW()

メカニズムの2番目の部分は、最近(任意の時間間隔で)更新されていないsessionsセッションのテーブルをスキャンし、そのセッションのファイルを削除するcronジョブです。last_visisted_time

于 2012-07-22T19:15:17.413 に答える
4

1つの方法は電話することです

  $thePath = session_save_path();

保存されているすべてのセッションファイルを繰り返し処理し、それぞれのシリアル化を解除して、指定されたタイムアウトプロパティを確認します。

残念ながら、ディレクトリ全体をスキャンして、定義された期間より古いすべてのセッションファイルを見つける必要があります。start()セッションファイルの経過時間を把握するために使用します。

手入れの行き届いたサーバーでは、各仮想ホストにセッションデータ用の個別のディレクトリが必要です。あまりよく管理されていない場合、すべてのセッションが統合された共有ディレクトリに保存される可能性があります。したがって、他の仮想ホストのセッションデータを読み取ったり削除したりしないようにしてください。

データベースを使用したより良いアプローチ

したがって、セッションデータをアプリケーションのバックエンドデータベースに保存することを提案します。SQLを使用すると、古いセッションファイルをすべて見つけるのは簡単です。

のドキュメントにsession_set_save_handler()はサンプルが用意されており、オブジェクトに基づいてこのプロセス全体を非常にうまく説明しています。

于 2012-07-22T19:16:51.360 に答える
1

上記のすべての回答が好きですが、別の解決策は、アップロードされたファイルに「一時的」であることがわかる方法で名前を付けることです。たとえば、名前の前にタイムスタンプを付けます。このように、プログラムがファイルを保持する必要があると判断しない限り、定期的なプロセスでそのようなファイルをクリーンアップし、それに応じて名前を変更します。

于 2012-07-22T22:38:57.723 に答える