
PHP はセッション オブジェクトを非常にうまくカプセル化します。HTTP プロトコルに従って、Web サイトの各範囲への訪問者は一意の識別子を生成できます。
これは統計です。オンラインの人数は、この session_id だけで訪問者を区別できるということです。みんな違うから。
次に、セッション変数の値をデータベースに保存する方法です。ここでは別の関数を紹介します。
1 2 3 4 5 6 7 8 | bool session_set_save_handler ( callable $open , callable $close , callable $read , callable $write , callable $destroy , callable $gc )
|
ログイン後にコピー
上記の関数のいくつかにはパラメータが渡されていることに注意してください。着信送信があることを示します。 PHP がコードを実行すると、
session
のパラメーターが自動的に読み取られます。次のステップは、上記の 5 つの関数とメイン関数を完了することです
1 2 3 4 5 6 7 8 | session_set_save_handler(
array ( "session" , "open" ),
array ( "session" , "close" ),
array ( "session" , "read" ),
array ( "session" , "write" ),
array ( "session" , "destroy" ),
array ( "session" , "gc" )
);
|
ログイン後にコピー
main 関数はこのようにして完成します。
注: オブジェクトをパラメータとして渡すメソッドは次の形式を使用する必要があります: array(object, "method name")
次のステップは各関数を書くことです
1 2 3 4 5 6 7 | function open( $path , $sessname ) {
$db = mysql_connect( "localhost" , "root" , "123456" , "test" );
mysql_select_db( "test" , $db );
mysql_query( "SET NAMES UTF8" );
return true;
}
|
ログイン後にコピー
リンクできるデータを閉じます
1 2 3 4 5 | function close(){
$db = mysql_connect( "localhost" , "root" , "123456" , "test" );
mysql_close( $db );
return true;
}
|
ログイン後にコピー
キー関数が開始され、読み取り関数read()を表示します。主にread( ) 関数には、渡される値は session_id です。
1 2 3 4 5 6 | function read( $sid ){
$sql = "select data from session where sid='{$sid}' and card='" .self:: $card . "'" ;
$query = mysql_query( $sql ) or die (mysql_error());
$row = mysql_fetch_array( $query );
$row >0? $row [ "data" ]: " " ;
}
|
ログイン後にコピー
2 番目の関数は write 関数です。データがデータベースに存在する場合は、時刻を更新するだけで、新しいデータが書き込まれます
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | function write( $sid , $data )
{
$sql = "select sid from session where sid='{$sid}' and card='" .self:: $card . "'" ;
$query = mysql_query( $sql ) or die (mysql_error());
$mtime = time();
$num = mysql_num_rows( $query );
if ( $num ){
$sql = "UPDATE session SET data='{$data}', mtime ='{$mtime}'" ;
} else {
$sql = "INSERT INTO session (sid,data,mtime,ip,card) VALUES('{$sid}','{$data}','" .time(). "','{$_SERVER['REMOTE_ADDR']}','" .self:: $card . "')" ;
}
mysql_query( $sql );
return true;
}
|
ログイン後にコピー
次は、PHP リサイクル メカニズムを具体化する関数で、どちらの関数にもパラメータが渡されます。
1 2 3 4 5 6 7 8 9 10 11 | function destroy( $sid ){
$sql = "DELETE FROM session WHERE sid='{$sid}'" ;
mysql_query( $sql ) or die (mysql_error());
return true;
}
function gc( $max_time ){
$max_time = 600;
$sql = "DELETE FROM session WHERE `mtime`<'" .(time()- $max_time ). "'" ;
mysql_query( $sql ) or die (mysql_error());
return true;
}
|
ログイン後にコピー
わかりました。5 つの関数が完了すると、セッション レコードの数がセッション テーブルから読み取られます。ページにアクセスした人の数を正確にカウントできます。
10 分間操作がなかったユーザーの記録は消去されます。
PHP を通じてオンラインの人数をカウントするための正確なコード:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | <?php
$filename ='online.txt';
$cookiename ='VGOTCN_OnLineCount';
$onlinetime =600;
$online =file( $filename );
$nowtime = $_SERVER ['REQUEST_TIME'];
$nowonline = array ();
foreach ( $online as $line ){
$row = explode ('|', $line );
$sesstime =trim( $row [1]);
if (( $nowtime - $sesstime )<= $onlinetime ){
$nowonline [ $row [0]]= $sesstime ;
}
}
if (isset( $_COOKIE [ $cookiename ])){
$uid = $_COOKIE [ $cookiename ];
} else {
$vid =0;
do {
$vid ++;
$uid ='U'. $vid ;
} while ( array_key_exists ( $uid , $nowonline ));
setcookie( $cookiename , $uid );
}
$nowonline [ $uid ]= $nowtime ;
$total_online = count ( $nowonline );
if ( $fp =@ fopen ( $filename ,'w')){
if ( flock ( $fp ,LOCK_EX)){
rewind ( $fp );
foreach ( $nowonline as $fuid => $ftime ){
$fline = $fuid .'|'. $ftime . "\n" ;
@ fputs ( $fp , $fline );
}
flock ( $fp ,LOCK_UN);
fclose( $fp );
}
}
echo 'document.write( "'.$total_online.'" );';
|
ログイン後にコピー
関連する推奨事項:
PHP ビデオ チュートリアル: https://www 。 php.cn/course/list/29/type/2.html
以上がオンライン人数のカウントを実装する PHP メソッドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。