PHP顯示當(dāng)前在線用戶_PHP教程
教程Tag:暫無Tag,歡迎添加,賺取U幣!
推薦:PHP的拼寫檢查函數(shù)庫在使用這個函數(shù)前,需要先到 http://metalab.unc.edu/kevina/aspell 取回所需的拼寫檢查函數(shù)庫 aspell library。 aspell_new : 載入一個新的字典。 aspell_check : 檢查一個單字。 aspell_check-raw : 檢查一個單字,即使拼錯也不改變或修正。 aspell_sugges
如何利用PHP會話顯示出當(dāng)前在線的用戶,在PHP中session的用法。
綜述
PHP會話即SESSION是指用戶從進(jìn)入網(wǎng)站到關(guān)閉網(wǎng)站這段時間內(nèi)活動的一種機(jī)制,它提供了所有網(wǎng)頁都共同使用的公共變量存貯機(jī)制。那么SESSION到底有什么用處呢?網(wǎng)上購物時大家都用過購物車,你可以隨時把你選購的商品加入到購物車中,最后再去收銀臺結(jié)帳。在整個過程中購物車一直扮演著臨時存貯被選商品的角色,用它追蹤用戶在網(wǎng)站上的活動情況,這就是SESSION的作用。
SESSION的發(fā)明填補(bǔ)了HTTP協(xié)議的局限,HTTP協(xié)議被認(rèn)為是無狀態(tài)協(xié)議,當(dāng)它在服務(wù)端完成響應(yīng)之后,服務(wù)器就失去了與該瀏覽器的聯(lián)系。會話的發(fā)明使得一個用戶在多個頁面間切換時能夠保存他的信息。
在PHP3版本未直接提供session功能,我們只能用其它辦法來實(shí)現(xiàn),比如用PHPLIB。如果說PHP4與PHP3相比,它最大的進(jìn)步就是提供了SESSION。
Session基礎(chǔ)知識
要使用session需要PHP4.1以上的版本,而且需要把php.ini中的register_globle=Off設(shè)成register_globle=On。另外,session.cookie_path = / 這行不易更改。
PHP中的session默認(rèn)情況下是使用客戶端的Cookie。當(dāng)客戶端的Cookie被禁用時,會自動通過Query_String來傳遞。
Php處理會話的函數(shù)一共有11個,我們詳細(xì)介紹一下將要用到幾個函數(shù)。
1、 session_start
函數(shù)功能:開始一個會話或者返回已經(jīng)存在的會話。
函數(shù)原型:boolean session_start(void);
返回值:布爾值
功能說明:這個函數(shù)沒有參數(shù),且返回值均為true。最好將這個函數(shù)置于最先,而且在它之前不能有任何輸出,否則會報警,如:Warning: Cannot send session cache limiter - headers already sent (output started at /usr/local/apache/htdocs/cga/member/1.php:2) in /usr/local/apache/htdocs/cga/member/1.php on line 3
2、 session_register
函數(shù)功能:登記一個新的變量為會話變量
函數(shù)原型:boolean session_register(string name);
返回值:布爾值。
功能說明:這個函數(shù)是在全局變量中增加一個變量到當(dāng)前的SESSION中,參數(shù)name就是想要加入的變量名,成功則返回邏輯值true。可以用_SESSION[name]或HTTP_SESSION_VARS[name]的形式來取值或賦值。
3、 session_is_registered
函數(shù)功能:檢查變量是否被登記為會話變量。
函數(shù)原型:boobean session_is_registered(string name);
返回值:布爾值
功能說明:這個函數(shù)可檢查當(dāng)前的session之中是否已有指定的變量注冊,參數(shù)name就是要檢查的變量名。成功則返回邏輯值true。
4、 session_unregister
函數(shù)功能:刪除已注冊的變量。
函數(shù)原型:boolean session_session_unregister(string name);
返回值:布爾值
功能說明:這個函數(shù)在當(dāng)前的session之中刪除全局變量中的變量。參數(shù)name就是欲刪除的變量名,成功則返回true.
5、 Session_destroy
函數(shù)功能:結(jié)束當(dāng)前的會話,并清空會話中的所有資源。
函數(shù)原型:boolean session destroy(void);
返回值:布爾值。
功能說明:這個函數(shù)結(jié)束當(dāng)前的session,此函數(shù)沒有參數(shù),且返回值均為true
上面介紹函數(shù)下文將會用到,但還有一些有關(guān)session的函數(shù)也介紹一下:
6、 session_encode
函數(shù)功能:sesssion信息編碼
函數(shù)原型:string session_encode(void);
返回值:字符串
功能說明:返回的字符串中包含全局變量中各變量的名稱與值,形式如:a|s:12:"it is a test";c|s:4:"lala"; a是變量名 s:12代表變量a的值"it is a test的長度是12 變量間用分號”;”分隔。
7、 session_decode
函數(shù)功能:sesssion信息解碼
函數(shù)原型:boolean session_decode (string data)
返回值:布爾值
功能說明:這個函數(shù)可將session信息解碼,成功則返回邏輯值true
8、 session_name
函數(shù)功能:存取當(dāng)前會話名稱
函數(shù)原型:boolean session_name(string [name]);
返回值:字符串
功能說明:這個函數(shù)可取得或重新設(shè)置當(dāng)前session的名稱。若無參數(shù)name則表示獲取當(dāng)前session名稱,加上參數(shù)則表示將session名稱設(shè)為參數(shù)name
9、 session_id
函數(shù)功能:存取當(dāng)前會話標(biāo)識號
函數(shù)原型:boolean session_id(string [id]);
返回值:字符串
功能說明:這個函數(shù)可取得或重新設(shè)置當(dāng)前存放session的標(biāo)識號。若無參數(shù)id則表示只獲取當(dāng)前session的標(biāo)識號,加上參數(shù)則表示將session的標(biāo)識號設(shè)成新指定的id
10、 session_unset
函數(shù)功能:刪除所有已注冊的變量。
函數(shù)原型:void session_unset (void)
返回值:布爾值
功能說明:這個函數(shù)和Session_destroy不同,它不結(jié)束會話。就如同用函數(shù)session_unregister逐一注銷掉所有的會話變量。
編程思路
在社區(qū)、論壇中,我們常能看到當(dāng)前在線的會員,使訪問者有賓至如歸之感。但這種程序是怎么做出來的呢?
流程如下:
建表user,保存注冊用戶信息。
字段 | 類型 | 備注 |
userid | Int(10) | 用戶序列號 auto_increment 關(guān)鍵字 |
username | Varchar(50) | 用戶匿稱 |
userpwd | Varchar(50) | 密碼 |
email | Varchar(50) | 電子信箱 |
oicq | Varchar(50) | OICQ號 |
signature | mediumtext | 簽名 |
imgurl | Varchar(50) | 頭像 |
joindate | Varchar(50) | 加入時間 |
建類文件user.php 定義函數(shù)
exist(username)確認(rèn)新注冊用戶是不是已經(jīng)存在
nsert(username,userpwd,email,oicq,imgurl,signature)插入注冊用戶
update(userid,username,userpwd,email,oicq,imgurl,signature) 更新用戶數(shù)據(jù)
get_from_condition(con) 返回滿足查詢條件的記錄集
建表session。當(dāng)用戶登錄時即向此表插入新記錄,離開或超時后刪除記錄,保證表中保存的是當(dāng)前在線的用戶。
字段 | 類型 | 備注 |
sessionid | Int(10) | 序列號 auto_increment 關(guān)鍵字 |
userid | Int(10) | 用戶序列號取自user表 |
ipaddress | Varchar(50) | Ip地址 |
lastactivity | Int(10) | 最后活動時間,用它來判斷用戶是否還在線 |
建類文件session.php 定義函數(shù)
insert(userid,ipaddress,lastactivity) 把登錄成功的用戶插入到表中
update(userid,ipaddress,lastactivity)更新在線用戶最后活動時間
del(con)刪除滿足條件的用戶,用它來清除離線用戶
get_from_condition(con) 返回滿足查詢條件的記錄集
公用文件global.php
include "class/config.inc.php"; //把配置文件包含進(jìn)來
db = new db;
db-> db_connect( ); //連接數(shù)據(jù)庫
user = new user; //初始化
session = new session;
//啟動會話
session_start();
//刪除session表中已經(jīng)過期的用戶(即非在線網(wǎng)友)因?yàn)榇宋募偸潜徽{(diào)用從而保證顯示的都是當(dāng)前在線的用戶
curtime=time();
con="lastactivity<curtime";
session->del(con);
//正在線的網(wǎng)友需不斷更新session表中的lastactivity時間,并重新設(shè)置用戶的COOKIES
if (HTTP_SESSION_VARS["online"]=="on"){ //此處也可用_SESSION[“online”]
userid=HTTP_SESSION_VARS["userid"]; //取當(dāng)前在線用戶的userid
ipaddress=substr(REMOTE_ADDR,0,50);
lastactivity=time()+3600; //更新最后活動時間,如時一個小時之內(nèi)未調(diào)動頁面就認(rèn)為用戶已離線,從而會被刪除。
session->update(userid,ipaddress,lastactivity);
}else{
//如果未登錄那直接轉(zhuǎn)入登錄頁面
firstpage="logon.php";
header ("Location: firstpage");
exit;
}
登錄文件logon.php
<? include "global.php"; //把global.php文件包含進(jìn)來
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=username; //給會話變量賦值
online="on"; //這個變量在global.php用到以更新最后活動時間lastactivity
userid=user->userid;
ipaddress=substr(REMOTE_ADDR,0,50);
lastactivity=time()+3600;
con=" userid=userid";
session->get_from_condition(con);
//判斷會話是否存在,有可能你在不同的機(jī)器上登兩次。
if (session->counter==1){
session->update(userid,ipaddress,lastactivity); //如存在,更新
}else{
session->insert(userid,ipaddress,lastactivity); //如不存在,插入
}
//在客戶機(jī)設(shè)置COOKIES
SetCookie("ccauser",username,time()+3600);
Header("Location:test.php");//然后導(dǎo)向測試頁
}
}
?>
<?
if(HTTP_SESSION_VARS["online"]=="") { //判斷是否已登錄
?>
//下面是登錄的表單
<form name="form1" method="post" action="">
名稱: <input type="text" name="username">
密碼: <input type="text" name="userpwd">
<input type="hidden" name="hiddenField" value="0">
<input type="submit" name="Submit" value="提交">
<input type="reset" name="Submit2" value="重置">
</form>
<?
}else{
echo "網(wǎng)友:".HTTP_COOKIE_VARS["ccauser"]."你已經(jīng)登錄了"; //如果已登錄則顯示提示
str="<br><br><a href='exit.php'>退出社區(qū)</a>";
echo str;
}
?>
測試文件test.php
<?
include "global.php"; //把global.php文件包含進(jìn)來
strWelcome="歡迎<font color=red>"._SESSION['ccauser']."</font><br>";
echo strWelcome; //顯示歡迎信息
str=” 當(dāng)前在線用戶:<br>===================<br>”;
con=" 1=1";
//提出session表中所有記錄即是當(dāng)前在線用戶,未把游客算在內(nèi)
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;
?>
<br><a href='exit.php'>退出社區(qū)</a>
退出文件exit.php
<?
include "global.php"; //把global.php文件包含進(jìn)來
if (_SESSION["online"]=="on"){
con="userid=userid";
session->del(con); //在session表中刪除用戶信息。
session_destroy(); //結(jié)束當(dāng)前的會話,并清空會話中的所有資源
echo "已經(jīng)退出社區(qū)......";
}
?>
分享:PHP實(shí)現(xiàn)網(wǎng)站的無限分類1.分析 我們在用 php 制作網(wǎng)站時,分類是很重要的,在分類下面又再分類這第二個分類稱為次分類,而現(xiàn)在大多數(shù)網(wǎng)站分類只分到第三類: 第一分類(父分類)--第二分類(子分類)--第三分類(孫分類) 這種親緣分類越多,程序和數(shù)據(jù)庫的控制就越加的復(fù)雜困難.在同一級的分
相關(guān)PHP教程:
- PHPNOW安裝Memcached擴(kuò)展方法詳解
- php記錄頁面代碼執(zhí)行時間
- PHP中獎概率的抽獎算法程序代碼
- apache設(shè)置靜態(tài)文件緩存方法介紹
- php對圖像的各種處理函數(shù)代碼小結(jié)
- PHP 關(guān)于訪問控制的和運(yùn)算符優(yōu)先級介紹
- 關(guān)于PHP語言構(gòu)造器介紹
- php/js獲取客戶端mac地址的實(shí)現(xiàn)代碼
- php5.5新數(shù)組函數(shù)array_column使用
- PHP preg_match的匹配多國語言的技巧
- php 中序列化和json使用介紹
- php采集文章中的圖片獲取替換到本地
- 相關(guān)鏈接:
- 教程說明:
PHP教程-PHP顯示當(dāng)前在線用戶。