ホームページ  >  記事  >  php教程  >  PHP セッションを使用して現在オンラインのユーザーを表示する方法

PHP セッションを使用して現在オンラインのユーザーを表示する方法

WBOY
WBOYオリジナル
2016-06-21 09:11:541069ブラウズ

オンラインで見る

しばらく前にこの記事を書き、ご協力いただいた皆様に感謝の気持ちを込めて投稿しました。
==============

概要
PHP セッション、または SESSION は、Web サイトへのアクセスから Web サイトを閉じるまでのユーザーのアクティビティのメカニズムを指し、一般的に使用されるメカニズムを提供します。すべての Web ページのパブリック変数ストレージ メカニズム。では、SESSION は何に役立つのでしょうか?オンラインで買い物をするとき、誰もがショッピング カートを使用したことがあります。いつでも選択した商品をショッピング カートに追加し、最後にレジに行って会計を行うことができます。このプロセス全体において、ショッピング カートは選択した商品を一時的に保管し、Web サイト上でのユーザーのアクティビティを追跡するために使用する役割を果たしています。これが SESSION の役割です。
SESSION の発明により、HTTP プロトコルの制限が解消されました。HTTP プロトコルは、サーバー側で応答を完了すると、ブラウザーとの接続を失います。セッションの発明により、ユーザーは複数のページを切り替えるときに自分の情報を保存できるようになります。
セッション関数は PHP3 バージョンでは直接提供されていません。これを実現するには、PHPLIB を使用するなどの他の方法を使用する必要があります。 PHP4 を PHP3 と比較した場合、その最大の改善点は SESSION が提供されていることです。

Sessionの基礎知識
Sessionを利用するにはPHP 4.1以上が必要で、php.iniのregister_globle=Offをregister_globle=Onに設定する必要があります。また、 session.cookie_path = / の行は変更するのが簡単ではありません。
PHP のセッションはデフォルトでクライアント Cookie を使用します。クライアントの Cookie が無効になっている場合、Cookie は自動的に Query_String を介して渡されます。

Phpにはセッションを処理するための関数が全部で11個あります。使用する関数をいくつか詳しく紹介します。
1. session_start
関数: セッションを開始するか、既存のセッションを返します。
関数プロトタイプ: boolean session_start(void);
戻り値: ブール値
関数の説明: この関数にはパラメータがなく、戻り値は true です。この関数を最初に置くのが最善であり、その前に出力があってはなりません。そうしないと、次のようなアラームが発行されます。 警告: セッション キャッシュ リミッターを送信できません - ヘッダーはすでに送信されました (出力は /usr/local/apache/ で開始されました) htdocs/cga /member/1.php:2) /usr/local/apache/htdocs/cga/member/1.php の 3 行目
2. session_register
関数: 新しい変数をセッション変数として登録します
関数プロトタイプ: boolean session_register(文字列名);
戻り値: ブール値。
関数の説明: この関数は、グローバル変数内の現在の SESSION に変数を追加します。成功すると、パラメーター名は、論理値 true を返します。 $_SESSION[name] または $HTTP_SESSION_VARS[name] の形式を使用して、値を取得または割り当てることができます。
3. session_is_registered
機能: 変数がセッション変数として登録されているかどうかを確認します。
関数プロトタイプ: boobean session_is_registered(string name);
戻り値: ブール値
関数説明: この関数は、指定された変数が現在のセッションに登録されているかどうかを確認できます。パラメーター名は、確認する変数名です。成功すると、論理値 true が返されます。
4. session_unregister
機能: 登録された変数を削除します。
関数プロトタイプ: boolean session_session_unregister(string name);
戻り値: ブール値
関数説明: この関数は、現在のセッションのグローバル変数内の変数を削除します。パラメータ名は削除する変数の名前で、成功した場合は true を返します。
5. Session_destroy
機能: 現在のセッションを終了し、セッション内のすべてのリソースをクリアします。
関数プロトタイプ: boolean session destroy(void);
戻り値: ブール値。
関数の説明: この関数は現在のセッションを終了します。この関数にはパラメーターがなく、戻り値は true です

上で紹介した関数を以下で使用しますが、セッション関連の関数もいくつか紹介します:
6 session_encode
関数 function: セッション情報エンコード
関数プロトタイプ: string session_encode(void);
戻り値: string
関数の説明: 返される文字列には、グローバル変数の各変数の名前と値が次の形式で含まれます。 s:12 :"それはテストです";c|s:4:"lala"; a は変数名です s:12 は変数 a の値を表します "それはテストであり、長さは 12 であり、変数は区切られています
7. session_decode
関数: セッション情報をデコードします
関数プロトタイプ: ブール値 session_decode (文字列データ)
戻り値: ブール値
関数の説明: この関数はセッション情報をデコードし、成功した場合は論理値 true を返します。
8. session_name
function 関数: 現在のセッション名にアクセスします。
関数プロトタイプ: boolean session_name (string [name]);
戻り値: string
関数の説明: この関数は、現在のセッションの名前を取得またはリセットできます。パラメータ名がない場合は、現在のセッション名を取得することを意味し、パラメータを追加することは、セッション名をパラメータ名に設定することを意味します
関数関数: 現在のセッション識別番号にアクセスします
関数プロトタイプ: boolean session_id(string [id ]);
戻り値: string
関数の説明: この関数は、現在保存されているセッションの識別番号を取得またはリセットできます。パラメーター ID がない場合は、パラメーターを追加することのみを意味します。セッションの識別番号を新しく指定した ID に設定します。 10. session_unset
機能: 登録されている変数をすべて削除します。
関数プロトタイプ: void session_unset (void)
戻り値: ブール値
関数説明: この関数はセッションを終了しないという点で Session_destroy とは異なります。 session_unregister 関数を使用してすべてのセッション変数を 1 つずつログアウトするのと同じです。



プログラミングのアイデア
コミュニティやフォーラムでは、現在オンラインに参加しているメンバーがよく見られ、訪問者がくつろげるように感じられます。しかし、このプログラムはどうやって作られているのでしょうか?

処理は以下の通りです。











ユーザーテーブルを作成し、登録されているユーザー情報を保存します。
フィールドタイプの備考
userid Int(10) ユーザーのシリアル番号 auto_increment キーワード
username Varchar(50) ユーザーの匿名名
userpwd Varchar(50) パスワード
email Varchar(50) 電子メールアドレス
oicq Varchar(50) OICQ 番号
署名媒体テキストSignature
imgurl Varchar(50) Avatar
joindate Varchar(50) Join time
クラスファイル作成 user.php function定義
exist($username) 新規登録したユーザーが既に存在するか確認
nsert($username,$userpwd,$ email ,$oicq,$imgurl,$signature) 登録済みユーザーを挿入
update($userid,$username,$userpwd,$email,$oicq,$imgurl,$signature) ユーザーデータを更新
get_from_condition($con) を満たすために戻りますクエリ条件付きレコードセット

テーブルセッションを作成します。ユーザーがログインすると、新しいレコードがこのテーブルに挿入され、現在オンラインのユーザーがテーブルに保存されるように、ユーザーが退席するかタイムアウトするとレコードが削除されます。
フィールドタイプの備考
sessionid Int(10) シリアル番号 auto_increment キーワード
userid Int(10) ユーザーのシリアル番号はユーザーテーブルから取得されます
ipaddress Varchar(50) IP アドレス
lastactivity Int(10) 前回のアクティビティ時間。ユーザーがまだオンラインであるかどうかを判断します
クラスファイル session.php を作成し、関数
insert($userid,$ipaddress,$lastactivity)を定義して、正常にログインしたユーザーをテーブルに挿入します
update($userid,$ipaddress, $lastactivity) は最後のオンライン ユーザーのアクティビティ時間を更新します
del($con) は条件を満たすユーザーを削除し、オフライン ユーザーをクリアするために使用します
get_from_condition($con) はクエリ条件を満たすレコード セットを返します

パブリック ファイル グローバル.php
include "class/config.inc.php "; //設定ファイルをインクルードします
$db = new db;
$db-> //データベースに接続します
$user = new user; //初期化
$session = new session;

/ /セッションの開始
session_start();
//セッション テーブル内の期限切れのユーザー (つまり、オンラインではないユーザー) を削除します。これは、このファイルが常に呼び出され、現在すべてのオンラインが確実に行われるためです。ユーザーが表示されます
$curtime=time();
$con="lastactivity<$curtime";
$session->del($con);

//オンラインユーザーはセッション内の最終アクティビティ時間を常に更新する必要がありますテーブルを作成し、ユーザーの COOKIES をリセットします
if ( $HTTP_SESSION_VARS["online"]=="on"){ //$_SESSION["online"] を使用することもできます
$userid=$HTTP_SESSION_VARS["userid"] //現在のオンライン ユーザーのユーザー ID を取得します
$ipaddress =substr($REMOTE_ADDR,0,50);
$lastactivity=time()+3600; // ページが 1 時間以内に移動されなかった場合は、最後のアクティビティ時間を更新します。ユーザーはオフラインとみなされ、削除されます。
$session->update($userid,$ipaddress,$lastactivity);
}else{
//ログインしていない場合は、ログインページに直接移動します
$firstpage="logon.php";
header ("場所: $firstpage");
exit;
}
ログイン ファイル logon.php

if ($hiddenField=="0") ){ / /フォームが送信されていないことをテストします

$con="username='$username' and userpwd='$userpwd'";
$result=$user->get_from_condition($con);
if ( $user- >counter==1){
if (!session_is_registered("online")){//登録されているか確認
session_register("online") // 新しい変数をセッション変数として登録します
; }
if ( !session_is_registered("ccauser")){
session_register("ccauser");
}
if (!session_is_registered("userid")){
session_register("userid");
}
$ccauser=$ユーザー名; // セッション変数に値を代入します
$online="on"; //この変数は、最後のアクティビティ時刻を更新するために global.php で使用されます
$userid=$user->userid;
$ipaddress=substr($REMOTE_ADDR,0,50); $ lastactivity=time()+3600;
$con=" userid=$userid";
$session->get_from_condition($con);
// セッションが存在するかどうかを確認します。異なるマシン。
if ($session->counter==1){
$session->update($userid,$ipaddress,$lastactivity); // 存在する場合は更新します
}else{
$session->insert ( $userid,$ipaddress,$lastactivity); // 存在しない場合は、
}
を挿入します
// クライアントに COOKIES を設定します
SetCookie("ccauser",$username,time()+3600);
ヘッダー("Location :test.php");//テスト ページに移動します
}
}
?>
if($HTTP_SESSION_VARS["online"]=="") { //ログインしています
?> ;
//以下はログインフォームです


名前:
パスワード:




}else{
echo "Netizen:". $HTTP_COOKIE_VARS["ccauser"]."あなたはすでにログインしています" // ログインしている場合は、プロンプトが表示されます
$str="

;a href='exit.php'>コミュニティを終了 ";
echo $str;
}
?>

テスト ファイル test.php
include "global.php" ; // global.php ファイルをインクルードします
$strWelcome= "Welcome".$_SESSION['ccauser']."
";
echo $strWelcome;ウェルカム メッセージを表示します
$str=” 現在のオンライン ユーザー:
====================
$con= 1=1 ";
//セッション テーブル内のすべてのレコードを提案します 現在のオンライン ユーザー (訪問者はカウントしません)
$result=$session->get_from_condition($con);
while($row=mysql_fetch_array($result)){

$con1="userid=$row[userid ]";
$user->get_from_condition($con1);
$str.=$user->username." ";
}
echo $str;
?> ;

コミュニティを終了

ファイルを終了 exit.php
include "global.php"; .php ファイル
if ($_SESSION[" online"]=="on"){
$con="userid=$userid";
$session->del($con); // ファイル内のユーザー情報を削除します。セッションテーブル。
session_destroy();




声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:カレンダー次の記事:カレンダー