編碼的世界 / 優質文選 / 文明

php裏session的用法(超級經典)


2022年7月01日
-   

php中session的用法 PHP中的session默認情況下是使用客戶端的Cookie。當客戶端的Cookie被禁用時,會自動通過Query_String來傳遞。 Php處理會話的函數一共有11個,我們詳細介紹一下將要用到幾個函數。 1、 session_start 函數功能:開始一個會話或者返回已經存在的會話。 函數原型:boolean session_start(void); 返回值:布爾值 功能說明:這個函數沒有參數,且返回值均為true。最好將這個函數置於最先,而且在它之前不能有任何輸出,否則會報警,如: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 函數功能:登記一個新的變量為會話變量 函數原型:boolean session_register(string name); 返回值:布爾值。 功能說明:這個函數是在全局變量中增加一個變量到當前的SESSION中,參數name就是想要加入的變量名,成功則返回邏輯值true。可以用$_SESSION[name]或$HTTP_SESSION_VARS[name]的形式來取值或賦值。 3、 session_is_registered 函數功能:檢查變量是否被登記為會話變量。 函數原型:boobean session_is_registered(string name); 返回值:布爾值 功能說明:這個函數可檢查當前的session之中是否已有指定的變量注冊,參數name就是要檢查的變量名。成功則返回邏輯值true。 4、 session_unregister 函數功能:刪除已注冊的變量。 函數原型:boolean session_session_unregister(string name); 返回值:布爾值 功能說明:這個函數在當前的session之中刪除全局變量中的變量。參數name就是欲刪除的變量名,成功則返回true. 5、 Session_destroy 函數功能:結束當前的會話,並清空會話中的所有資源。 函數原型:boolean session destroy(void); 返回值:布爾值。 功能說明:這個函數結束當前的session,此函數沒有參數,且返回值均為true 上面介紹函數下文將會用到,但還有一些有關session的函數也介紹一下: 6、 session_encode 函數功能:sesssion信息編碼 函數原型: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 函數功能:sesssion信息解碼 函數原型:boolean session_decode (string data) 返回值:布爾值 功能說明:這個函數可將session信息解碼,成功則返回邏輯值true 8、 session_name 函數功能:存取當前會話名稱 函數原型:boolean session_name(string [name]); 返回值:字符串 功能說明:這個函數可取得或重新設置當前session的名稱。若無參數name則表示獲取當前session名稱,加上參數則表示將session名稱設為參數name 9、 session_id 函數功能:存取當前會話標識號 函數原型:boolean session_id(string [id]); 返回值:字符串 功能說明:這個函數可取得或重新設置當前存放session的標識號。若無參數id則表示只獲取當前session的標識號,加上參數則表示將session的標識號設成新指定的id 10、 session_unset 函數功能:刪除所有已注冊的變量。 函數原型:void session_unset (void) 返回值:布爾值 功能說明:這個函數和Session_destroy不同,它不結束會話。就如同用函數session_unregister逐一注銷掉所有的會話變量。 編程思路 在社區、論壇中,我們常能看到當前在線的會員,使訪問者有賓至如歸之感。但這種程序是怎麼做出來的呢? 流程如下: 建表user,保存注冊用戶信息。 字段 類型 備注 userid Int(10) 用戶序列號 auto_increment 關鍵字 username Varchar(50) 用戶匿稱 userpwd Varchar(50) 密碼 email Varchar(50) 電子信箱 oicq Varchar(50) OICQ號 signature mediumtext 簽名 imgurl Varchar(50) 頭像 joindate Varchar(50) 加入時間 建類文件user.php 定義函數 exist($username)確認新注冊用戶是不是已經存在 nsert($username,$userpwd,$email,$oicq,$imgurl,$signature)插入注冊用戶 update($userid,$username,$userpwd,$email,$oicq,$imgurl,$signature) 更新用戶數據 get_from_condition($con) 返回滿足查詢條件的記錄集 建表session。當用戶登錄時即向此表插入新記錄,離開或超時後刪除記錄,保證表中保存的是當前在線的用戶。 字段 類型 備注 sessionid Int(10) 序列號 auto_increment 關鍵字 userid Int(10) 用戶序列號取自user表 ipaddress Varchar(50) Ip地址 lastactivity Int(10) 最後活動時間,用它來判斷用戶是否還在線 建類文件session.php 定義函數 insert($userid,$ipaddress,$lastactivity) 把登錄成功的用戶插入到表中 update($userid,$ipaddress,$lastactivity)更新在線用戶最後活動時間 del($con)刪除滿足條件的用戶,用它來清除離線用戶 get_from_condition($con) 返回滿足查詢條件的記錄集 公用文件global.php include "class/config.inc.php"; //把配置文件包含進來 $db = new db; $db-> db_connect( ); //連接數據庫 $user = new user; //初始化 $session = new session; //啟動會話 session_start(); //刪除session表中已經過期的用戶(即非在線網友)因為此文件總是被調用從而保證顯示的都是當前在線的用戶 $curtime=time(); $con="lastactivity<$curtime"; $session->del($con); //正在線的網友需不斷更新session表中的lastactivity時間,並重新設置用戶的COOKIES if ($HTTP_SESSION_VARS["online"]=="on"){ //此處也可用$_SESSION[“online”] $userid=$HTTP_SESSION_VARS["userid"]; //取當前在線用戶的userid $ipaddress=substr($REMOTE_ADDR,0,50); $lastactivity=time()+3600; //更新最後活動時間,如時一個小時之內未調動頁面就認為用戶已離線,從而會被刪除。 $session->update($userid,$ipaddress,$lastactivity); }else{ //如果未登錄那直接轉入登錄頁面 $firstpage="logon.php"; header ("Location: $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=$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); //判斷會話是否存在,有可能你在不同的機器上登兩次。 if ($session->counter==1){ $session->update($userid,$ipaddress,$lastactivity); //如存在,更新 }else{ $session->insert($userid,$ipaddress,$lastactivity); //如不存在,插入 } //在客戶機設置COOKIES SetCookie("ccauser",$username,time()+3600); Header("Location:test.php");//然後導向測試頁 } } ?> if($HTTP_SESSION_VARS["online"]=="") { //判斷是否已登錄 ?> //下面是登錄的表單 名稱:   密碼:   }else{ echo "網友:".$HTTP_COOKIE_VARS["ccauser"]."你已經登錄了"; //如果已登錄則顯示提示 $str=" [url=exit.php]退出社區[/url]"; echo $str; } ?> 測試文件test.php include "global.php"; //把global.php文件包含進來 $strWelcome="歡迎[color=red]".$_SESSION['ccauser']."[/color] "; echo $strWelcome; //顯示歡迎信息 $str=” 當前在線用戶: =================== ”; $con=" 1=1"; //提出session表中所有記錄即是當前在線用戶,未把遊客算在內 $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; ?> [url=exit.php]退出社區[/url] 退出文件exit.php include "global.php"; //把global.php文件包含進來 if ($_SESSION["online"]=="on"){ $con="userid=$userid"; $session->del($con); //在session表中刪除用戶信息。 session_destroy(); //結束當前的會話,並清空會話中的所有資源 echo "已經退出社區"; } ?>

熱門文章