2

ブラウザーが閉じられたとき、クラッシュしたとき、PC が再起動したときなどに、セッションを閉じる必要があります。

Cookie ソリューションがあることは知っていますが、ユーザーが Cookie を削除できるため、サーバー側で安全なものが必要です。

4

4 に答える 4

3

する必要はありません。ガベージ コレクターはセッションをクリーンアップします。

php ini 設定session.gc_maxlifetimeは、セッションがアクティブな状態を維持できる時間を決定します。

この値を超えると、セッションは自動的に削除されます。

于 2013-05-08T11:36:11.767 に答える
2

これはあなたが想像する方法ではできません。PHP では、このようなイベントに直接反応することはできません。最も近い方法は、ajax を使用してセッションを維持することです。

  1. $_SESSION['last_request'] を更新するだけの小さな php スクリプトを作成します。これを pulse.php と呼びます。
  2. yourdomain.com/api/pulse.php60 秒ごとにリクエストを送信する JavaScript をページに挿入します 。
  3. クリーンアップ スクリプトを開始してセッションを強制終了する場合は、すべての要求で最後の要求が 70 秒より古いかどうかを確認します。ブラウザがクラッシュすると、クリーンアップ スクリプトは実行されません。70 秒以上経過してセッションが期限切れになる前にリクエストを受信しない限り、セッションは通常の方法でタイムアウトします。セッションデータをデータベースに保存すると、これを修正できます。次に、最後のリクエストが 70 秒以上前のセッションがあるかどうかを定期的にチェックするワーカーまたは cronjob を実行できます。なんで70秒?1 分に 1 回のリクエストが予想される場合は、クライアント側の klatency または遅いハードウェアのために、ある程度の時間を考慮する必要があります。
于 2013-05-08T11:44:12.980 に答える