0

キャプティブ ポータル (インターネット ブラウジングのホスト スポット) を構築しています。バックグラウンド ジョブからセッションを破棄し、時間の経過後にページからユーザーをログアウトしたいと考えています。

どうしようか迷ってます。通常、セッションの破棄はユーザーがログインするページと同じページにコーディングする必要がありますが、特定の時間後にログインしているユーザーの cron ジョブからセッションを破棄したいと考えています。

セッションを破棄してユーザーをログアウトするために、cron で実行されている PHP スクリプトにいくつかの変数を渡す方法はありますか?

4

4 に答える 4

1

セッションはどこに記載されていますか?

/tmp/ フォルダー (デフォルト) のシリアル化されたファイルにある場合は、次を使用できます。

foreach(scandir('/tmp/') as $session_file)
{
   if(substr($session_file, 0, 5) != 'sess_')
   {
       // not a sessoin file
       continue;
   }

   // load sessoin
   $current_session = unserialize(file_get_contents('/tmp/' .  $session_file));

   // do some tests
   if($current_session['abc'] == 'def')
   {
       // store somthing in it
       $current_session['ghi'] = 'jkl';
       file_put_contents('/tmp/' .  $session_file, serialize($current_session));

       // or delete the session file
       unlink('/tmp/' .  $session_file);
   }
}
于 2013-05-31T19:51:03.790 に答える
1

ファイルであるphpのデフォルトのセッションストレージを使用すると、必要なことを行うことができなくなります。必要なのは、セッションをデータベースに保存することです。まさにこの仕事を行う多くのphpクラスがあります。セッションがデータベースに登録されると、各セッション行には関連付けられたユーザー ID (ログイン時に入力) と最後のアクティビティのタイムスタンプが含まれます。
これらの 2 つの列に基づいて、所有している任意の cronjob からユーザー セッションを削除できます。

于 2013-05-31T19:46:56.597 に答える
0

あなたの最高の最善は、おそらくデータベースでしょう。

ユーザーの session_id を作成時間と有効期限とともに保存します。次に、CLI クラスで cron ジョブを実行し、期限切れのセッション リストのデータベースを確認してから、サーバーから削除します (場所は、php の設定によって異なります)。また、削除すると、データベースでそれらを無効としてマークします。これにより、セッションが無効になります。

もちろん、ユーザーが提示しているセッションが存在するかどうかをテストするには、コードを少し変更する必要があります。

于 2013-05-31T19:48:17.153 に答える