php session的應(yīng)用詳細(xì)介紹
php session高級(jí)應(yīng)用
session在web技術(shù)中非常重要,由于網(wǎng)頁(yè)是一種無(wú)狀態(tài)的連接程序,因此無(wú)法得知用戶(hù)的瀏覽狀態(tài)。通過(guò)session則可以記錄用戶(hù)的有關(guān)信息,以供用戶(hù)再次以此身份對(duì)web服務(wù)器提交要求時(shí)確認(rèn)。
例如:用戶(hù)在瀏覽電子商務(wù)網(wǎng)站的時(shí)候,如果沒(méi)有session,那么用戶(hù)每次瀏覽就需要輸入賬戶(hù)密碼。
1,Session 臨時(shí)文件
在服務(wù)器中,如果將用戶(hù)所有的Session都保存到臨時(shí)目錄中,會(huì)降低服務(wù)器的安全性和效率。打開(kāi)服務(wù)器存儲(chǔ)的站點(diǎn)會(huì)非常的慢。
使用PHP函數(shù)session_save_path()函數(shù)存儲(chǔ)Session臨時(shí)文件,可以緩解因臨時(shí)文件的存儲(chǔ)導(dǎo)致的服務(wù)器效率降低和站點(diǎn)打開(kāi)緩慢的問(wèn)題。
示例代碼如下:
<?php $path ="./tmp/"; //設(shè)置session存儲(chǔ)的路徑 session_save_path($path); session_start(); $_SESSION['userName']=true; ?>
注意
session_save_path() 必須在session_start() 之前執(zhí)行。
2,Session 緩存
Session 緩存是將網(wǎng)頁(yè)中的內(nèi)容臨時(shí)存儲(chǔ)到IE客戶(hù)端的Temporary INternet Files文件夾,并且可以設(shè)置緩存的時(shí)間。
Session的緩存使用的是 session_cache_limiter()函數(shù),其語(yǔ)法如下:
string session_cache_limiter([string cache_limiter]);
其中參數(shù)cache_limiter 為public 或private 。同事session不是在服務(wù)器端,而是在客戶(hù)端。在服務(wù)器中沒(méi)有顯示。
緩存時(shí)間的設(shè)置,使用的是函數(shù) session_cache_expire()語(yǔ)法如下:
int session_cache_expire([int new_cahche_expire]);
參數(shù)new_cahche_expire 是session緩存的時(shí)間數(shù)字,單位分鐘。
注意:
這兩個(gè)session函數(shù)必須在session_start()函數(shù)之前執(zhí)行
session 緩存頁(yè)面的示例代碼如下:
<?php session_cache_limiter("private"); $cache_limit =session_cache_limiter(); //開(kāi)啟客戶(hù)端緩存 echo "緩存限制為:".$cache_limit."\n"; session_cache_expire(30); $cache_expire = session_cache_expire(); //設(shè)定客戶(hù)端緩存時(shí)間 echo "客戶(hù)端緩存時(shí)間為:".$cache_expire."分鐘\n"; session_start(); ?>
運(yùn)行結(jié)果如下:
3,Session數(shù)據(jù)庫(kù)存儲(chǔ)
在php中Session 的數(shù)據(jù)庫(kù)存儲(chǔ)主要是通過(guò) session_set_save_handler()函數(shù)來(lái)實(shí)現(xiàn)的。 具體語(yǔ)法如下:
bool session_set_save_handler(string open,string close,string read,string write,string destroy,string gc);
下面分別將這6個(gè)參數(shù)(函數(shù))分裝起來(lái),在學(xué)習(xí)完面向?qū)ο缶幊毯?,大家?huì)有一個(gè)更加清晰的認(rèn)識(shí)。
(1) 封裝session_open()函數(shù),代碼如下:
function _session_open($save_path,$session_name){ global $handle; $handle =mysql_connect('localhost','root','root')or die('數(shù)據(jù)庫(kù)連接失敗!'); mysql_select_db('db_database11',$handle)or die('數(shù)據(jù)庫(kù)不存在'); return(true); }
(2)封裝session_close()函數(shù),代碼如下:
function _session_close(){ global $handle; mysql_close($handle); return(true); }
(3) 封裝 session_read()函數(shù),在函數(shù)中設(shè)定當(dāng)前時(shí)間的UNIX時(shí)間戳,根據(jù)$key查找Session名片及內(nèi)容。代碼如下:
function _session_read($key){ golbal $handle; //全局變量$handle 連接數(shù)據(jù)庫(kù) $time =time(); //設(shè)定當(dāng)前時(shí)間 $sql ="select session_data from tb_session where session_key = '$key' and session_time>'$time'"; $result =mysql_query($ssql,$handle); $row =mysql_fetch_array($result); if($row){ return($row['session_data']); }else{ return(false); } }
(4) 封裝session_write()函數(shù),函數(shù)設(shè)定Session的失效時(shí)間,查找到Session的名稱(chēng)及內(nèi)容,如果查詢(xún)結(jié)果為空。則將頁(yè)面中Session根據(jù)session_id,session_name,失效時(shí)間,插入數(shù)據(jù)庫(kù)中。如果查詢(xún)結(jié)果不為空,則根據(jù) $key修改數(shù)據(jù)庫(kù)中Session存儲(chǔ)信息。代碼如下:
function _session_write($key,$data){ global $handle; $time = 60*60; $lapse_time =time()+$time; //得到UNIX時(shí)間戳 $sql = "select session_data from tb_session where session_key ='$key' and session_time>$lapse_time"; $result =mysql_query($sql,$handle); if(mysql_num_rows($result)==0){ //沒(méi)有結(jié)果 $sql ="insert into tb_session values('$key','$data',$lapse_time)"; $result =mysql_query($sql,$handle); }else{ $sql ="update tb_session set session_key='$key',session_data ='$data',session_time =$lapse_time where session_key ='$key'"; $result =mysql_query($sql,$handle); } return($result); }
(5) 封裝session_destroy(),根據(jù)$key刪除數(shù)據(jù)庫(kù)中的Sessin.代碼如下:
function _session_destroy(){ global $handle; $sql ="delete from tb_session where session_key ='$key'"; $result =mysql_query($sql,$handle); }
(6)封裝session_gc(),根據(jù)Session的失效時(shí)間刪除過(guò)期的Session,示例代碼如下:
functin _session_gc($expiry_time){ global $handle; $sql ="delete from tb_session where session_expiry_time<$expiry_time"; $result =mysql_query($sql,$handle); return($result); }
具體的代碼運(yùn)行就不做了,等到學(xué)完面向?qū)ο蟮木幊痰臅r(shí)候給大家演示下哦。
相關(guān)文章
php中HTTP_REFERER函數(shù)用法實(shí)例
這篇文章主要介紹了php中HTTP_REFERER函數(shù)用法,以實(shí)例的形式分別講述了判斷用戶(hù)來(lái)路與偽造來(lái)路地址等應(yīng)用,需要的朋友可以參考下2014-11-11php擴(kuò)展Zend?Framework框架——Validate擴(kuò)展
這篇文章介紹了php擴(kuò)展Zend?Framework框架,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2008-01-01php實(shí)現(xiàn)在限定區(qū)域里自動(dòng)調(diào)整字體大小的類(lèi)實(shí)例
這篇文章主要介紹了php實(shí)現(xiàn)在限定區(qū)域里自動(dòng)調(diào)整字體大小的類(lèi),實(shí)例分析了php操作圖片及字體的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-04-04PHP四種排序算法實(shí)現(xiàn)及效率分析【冒泡排序,插入排序,選擇排序和快速排序】
這篇文章主要介紹了PHP四種排序算法實(shí)現(xiàn)及效率分析,結(jié)合具體實(shí)例形式分析了php冒泡排序,插入排序,選擇排序和快速排序的具體定義、用法及算法復(fù)雜度分析,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2018-04-04php創(chuàng)建基本身份認(rèn)證站點(diǎn)的方法詳解
本篇文章是對(duì)php創(chuàng)建基本身份認(rèn)證站點(diǎn)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06php 強(qiáng)制下載文件實(shí)現(xiàn)代碼
php 強(qiáng)制下載文件實(shí)現(xiàn)代碼。需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2013-10-10php安裝ssh2擴(kuò)展的方法【Linux平臺(tái)】
這篇文章主要介紹了php安裝ssh2擴(kuò)展的方法,結(jié)合實(shí)例形式演示了基于Linux平臺(tái)的ssh2擴(kuò)展安裝步驟與相關(guān)注意事項(xiàng),需要的朋友可以參考下2016-07-07