0

私の PHP Web アプリケーションには、ファイル ベースのセッション メカニズムがあります。ユーザーがオンラインであるか、アイドル状態であるか、またはログアウトしているかを把握したいと考えています。現在、私は2つの解決策を念頭に置いていますが、どちらが優れているかわかりません。また、これら2つよりもうまく機能する代替手段があるかどうかもわかりません。私の要点は、DB にセッションを保存したくないので、ファイル ベースのセッションを使用するソリューションが必要だということです。

解決策 1:一意の user_id に基づいてセッション ファイルを作成し、ユーザーが何かを行うたびにセッションのタイムスタンプを更新すると、セッション ファイルが更新され、ディスクに再度書き込まれます。ユーザーがオンラインかどうかを確認したいときは、ユーザーの user_id を使用してセッション ファイルの最後のタイムスタンプを読み取ります。5 分未満の場合はオンラインであると想定し、5 分以上 10 分未満の場合はオンラインであると想定します。アイドル、それ以上のものはユーザーが外出していると思います。

解決策 2:ユーザー テーブルに last_login フィールドを作成することで同じことを行います。ユーザーがサイトで何かを行ったり、いくつかのページを表示したりするたびに、そのフィールドを最新のタイムスタンプで更新します。ユーザーがオンラインであることを確認したい場合は、 、彼の last_login タイムスタンプをチェックして、解決策 1 で説明したオンライン、アイドル、またはログアウト状態のいずれかに彼の時間が収まるかどうかを確認します。

だから私の質問は、どれがより速く、オーバーヘッドが少なくなるかということです。私の Web サイトには 5000 人のメンバーがいて、おそらく 1 日あたり 700 から 1200 人のメンバーがログインしています。VPS を持っていますが、すぐに専用サーバーに移動します。これら2つの解決策以外の提案はありますか?どれを選ぶ?

どうもありがとう!

4

2 に答える 2

0

通常のセッション ハンドラとともに、データベース内のセッションを追跡します。何かを永続的に保存する必要がない場合は、メモリ テーブルで実行できます。

于 2013-01-29T15:28:13.010 に答える
0

Cookie の使用について

Cookie を使用して一意のユーザーを識別し、最後に PHP ページにアクセスした時間を追跡します。次に、タイムアウト メカニズムを考え出します。たとえば、15 分間ページにアクセスしなかった場合、カウントから削除されます。

クッキーの設定方法:

<?php
//Set a cookie which will expire when the browser is closed
setcookie('mycookie', 'myvalue');

//Set a cookie which expires in about a year
setcookie('longtime', 'nextyear', time() + (60 * 60 * 24 * 365));
?>

必要なものの良い例:

<?php
//First we need to check if the user has visited before
//Let's use 'visittime' as the name for our cookie

if(isset($_COOKIE['visittime']))
{
  echo 'Welcome back!<br>';

  //Calculate how long is since the users last visit
  //We can do this simply by subtracting the last visit
  //time from the current time
  $timeElapsed = time() - $_COOKIE['visittime'];

  echo 'It has been ' . $timeElapsed . ' seconds since your last visit.';
}
else
{
  echo 'I see you are new here';
}

//Set the current time as a cookie and make it expire much later.
$nextYear = time() + (60 * 60 * 24 * 365);
setcookie('visittime', time(), $nextYear);
?>
于 2013-01-29T15:31:20.993 に答える