• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當(dāng)前位置:雨林木風(fēng)下載站 > 技術(shù)開發(fā)教程 > 詳細(xì)頁面

        如何運(yùn)用PHP會(huì)話顯示出當(dāng)前在線的用戶

        如何運(yùn)用PHP會(huì)話顯示出當(dāng)前在線的用戶

        更新時(shí)間:2021-11-16 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

        此文是我前一陣子寫的,帖上來以謝大家對我的幫助。
        =============

        綜述
        PHP會(huì)話即SESSION是指用戶從進(jìn)入網(wǎng)站到關(guān)閉網(wǎng)站這段時(shí)間內(nèi)活動(dòng)的一種機(jī)制,它提供了所有網(wǎng)頁都共同使用的公共變量存貯機(jī)制。那么SESSION到底有什么用處呢?網(wǎng)上購物時(shí)大家都用過購物車,你可以隨時(shí)把你選購的商品加入到購物車中,最后再去收銀臺(tái)結(jié)帳。在整個(gè)過程中購物車一直扮演著臨時(shí)存貯被選商品的角色,用它追蹤用戶在網(wǎng)站上的活動(dòng)情況,這就是SESSION的作用。
        SESSION的發(fā)明填補(bǔ)了HTTP協(xié)議的局限,HTTP協(xié)議被認(rèn)為是無狀態(tài)協(xié)議,當(dāng)它在服務(wù)端完成響應(yīng)之后,服務(wù)器就失去了與該瀏覽器的聯(lián)系。會(huì)話的發(fā)明使得一個(gè)用戶在多個(gè)頁面間切換時(shí)能夠保存他的信息。
        在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被禁用時(shí),會(huì)自動(dòng)通過Query_String來傳遞。

        Php處理會(huì)話的函數(shù)一共有11個(gè),我們詳細(xì)介紹一下將要用到幾個(gè)函數(shù)。
        1、 session_start
        函數(shù)功能:開始一個(gè)會(huì)話或者返回已經(jīng)存在的會(huì)話。
        函數(shù)原型:boolean session_start(void);
        返回值:布爾值
        功能說明:這個(gè)函數(shù)沒有參數(shù),且返回值均為true。最好將這個(gè)函數(shù)置于最先,而且在它之前不能有任何輸出,否則會(huì)報(bào)警,如: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ù)功能:登記一個(gè)新的變量為會(huì)話變量
        函數(shù)原型:boolean session_register(string name);
        返回值:布爾值。
        功能說明:這個(gè)函數(shù)是在全局變量中增加一個(gè)變量到當(dāng)前的SESSION中,參數(shù)name就是想要加入的變量名,成功則返回邏輯值true。可以用$_SESSION[name]或$HTTP_SESSION_VARS[name]的形式來取值或賦值。
        3、 session_is_registered
        函數(shù)功能:檢查變量是否被登記為會(huì)話變量。
        函數(shù)原型:boobean session_is_registered(string name);
        返回值:布爾值
        功能說明:這個(gè)函數(shù)可檢查當(dāng)前的session之中是否已有指定的變量注冊,參數(shù)name就是要檢查的變量名。成功則返回邏輯值true。
        4、 session_unregister
        函數(shù)功能:刪除已注冊的變量。
        函數(shù)原型:boolean session_session_unregister(string name);
        返回值:布爾值
        功能說明:這個(gè)函數(shù)在當(dāng)前的session之中刪除全局變量中的變量。參數(shù)name就是欲刪除的變量名,成功則返回true.
        5、 Session_destroy
        函數(shù)功能:結(jié)束當(dāng)前的會(huì)話,并清空會(huì)話中的所有資源。
        函數(shù)原型:boolean session destroy(void);
        返回值:布爾值。
        功能說明:這個(gè)函數(shù)結(jié)束當(dāng)前的session,此函數(shù)沒有參數(shù),且返回值均為true

        上面介紹函數(shù)下文將會(huì)用到,但還有一些有關(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)
        返回值:布爾值
        功能說明:這個(gè)函數(shù)可將session信息解碼,成功則返回邏輯值true
        8、 session_name
        函數(shù)功能:存取當(dāng)前會(huì)話名稱
        函數(shù)原型:boolean session_name(string [name]);
        返回值:字符串
        功能說明:這個(gè)函數(shù)可取得或重新設(shè)置當(dāng)前session的名稱。若無參數(shù)name則表示獲取當(dāng)前session名稱,加上參數(shù)則表示將session名稱設(shè)為參數(shù)name
        9、 session_id
        函數(shù)功能:存取當(dāng)前會(huì)話標(biāo)識號
        函數(shù)原型:boolean session_id(string [id]);
        返回值:字符串
        功能說明:這個(gè)函數(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)
        返回值:布爾值
        功能說明:這個(gè)函數(shù)和Session_destroy不同,它不結(jié)束會(huì)話。就如同用函數(shù)session_unregister逐一注銷掉所有的會(huì)話變量。



        編程思路
        在社區(qū)、論壇中,我們常能看到當(dāng)前在線的會(huì)員,使訪問者有賓至如歸之感。但這種程序是怎么做出來的呢?

        流程如下:











        建表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) 加入時(shí)間
        建類文件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)用戶登錄時(shí)即向此表插入新記錄,離開或超時(shí)后刪除記錄,保證表中保存的是當(dāng)前在線的用戶。
        字段 類型 備注
        sessionid Int(10) 序列號 auto_increment關(guān)鍵字
        userid Int(10) 用戶序列號取自user表
        ipaddress Varchar(50) Ip地址
        lastactivity Int(10) 最后活動(dòng)時(shí)間,用它來判斷用戶是否還在線
        建類文件session.php 定義函數(shù)
        insert($userid,$ipaddress,$lastactivity) 把登錄成功的用戶插入到表中
        update($userid,$ipaddress,$lastactivity)更新在線用戶最后活動(dòng)時(shí)間
        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;

        //啟動(dòng)會(huì)話
         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í)間,并重新設(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; //更新最后活動(dòng)時(shí)間,如時(shí)一個(gè)小時(shí)之內(nèi)未調(diào)動(dòng)頁面就認(rèn)為用戶已離線,從而會(huì)被刪除。
        $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"); //登記一個(gè)新的變量為會(huì)話變量
         }
         if (!session_is_registered("ccauser")){
         session_register("ccauser");
         }
         if (!session_is_registered("userid")){ 
         session_register("userid");
         }
         $ccauser=$username; //給會(huì)話變量賦值
         $online="on"; //這個(gè)變量在global.php用到以更新最后活動(dòng)時(shí)間lastactivity
         $userid=$user->userid;
         $ipaddress=substr($REMOTE_ADDR,0,50);
         $lastactivity=time()+3600;
         $con=" userid=$userid";
         $session->get_from_condition($con);
         //判斷會(huì)話是否存在,有可能你在不同的機(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)前的會(huì)話,并清空會(huì)話中的所有資源
         echo "已經(jīng)退出社區(qū)......";
        }
        ?>

        溫馨提示:喜歡本站的話,請收藏一下本站!

        本類教程下載

        系統(tǒng)下載排行

        主站蜘蛛池模板: 100000免费啪啪18免进| 久久久久久久岛国免费播放| 免费看美女让人桶尿口| 亚洲看片无码在线视频| 一色屋成人免费精品网站| 久久亚洲最大成人网4438| 好吊妞998视频免费观看在线| 国产色爽免费无码视频| 亚洲精品中文字幕乱码三区| 中国毛片免费观看| 成人免费午夜视频| 亚洲国产成人久久综合| 四只虎免费永久观看| 五月婷婷免费视频| 日韩高清免费观看| 无遮挡a级毛片免费看| 激情97综合亚洲色婷婷五| 国产日韩AV免费无码一区二区| 亚洲视频.com| 韩国欧洲一级毛片免费| 日本视频免费观看| 亚洲精品~无码抽插| 国产成人免费在线| 亚洲精品蜜夜内射| 亚洲综合国产一区二区三区| 99re在线免费视频| 亚洲av永久无码精品秋霞电影秋| 亚洲日韩国产一区二区三区| 欧美激情综合亚洲一二区| 亚洲精品一级无码鲁丝片| 久久免费公开视频| 亚洲一区二区三区写真| 国产福利电影一区二区三区,亚洲国模精品一区 | 亚洲av无码专区在线| 2021精品国产品免费观看| 亚洲五月丁香综合视频| mm1313亚洲精品国产| 99re免费在线视频| 麻豆亚洲AV成人无码久久精品 | 国产亚洲精品影视在线产品| 91网站免费观看|