這篇文章主要介紹了php session的應用詳細介紹的相關資料,需要的朋友可以參考下
php session進階應用程式
session在web技術中非常重要,由於網頁是一種無狀態的串連程式,因此無法得知使用者的瀏覽狀態。通過session則可以記錄使用者的有關資訊,以供使用者再次以此身份對web伺服器提交要求時確認。
例如:使用者在瀏覽電子商務網站的時候,如果沒有session,那麼使用者每次瀏覽就需要輸入賬戶密碼。
1,Session 臨時檔案
在伺服器中,如果將使用者所有的Session都儲存到臨時目錄中,會降低伺服器的安全性和效率。開啟伺服器儲存的網站會非常的慢。
使用PHP函數session_save_path()函數儲存Session臨時檔案,可以緩解因臨時檔案的儲存導致的伺服器效率降低和網站開啟緩慢的問題。
範例程式碼如下:
<?php$path ="./tmp/"; //設定session儲存的路徑session_save_path($path);session_start();$_SESSION['userName']=true;?>
注意
session_save_path() 必須在session_start() 之前執行。
2,Session 緩衝
Session 緩衝是將網頁中的內容臨時儲存到IE用戶端的Temporary INternet Files檔案夾,並且可以設定緩衝的時間。
Session的緩衝使用的是 session_cache_limiter()函數,其文法如下:
string session_cache_limiter([string cache_limiter]);
其中參數cache_limiter 為public 或private 。同事session不是在伺服器端,而是在用戶端。在伺服器中沒有顯示。
緩衝時間的設定,使用的是函數 session_cache_expire()文法如下:
int session_cache_expire([int new_cahche_expire]);
參數new_cahche_expire 是session緩衝的時間數字,單位分鐘。
注意:
這兩個session函數必須在session_start()函數之前執行
session 快取頁面面的範例程式碼如下:
<?phpsession_cache_limiter("private");$cache_limit =session_cache_limiter(); //開啟用戶端緩衝echo "緩衝限制為:".$cache_limit."\n";session_cache_expire(30);$cache_expire = session_cache_expire(); //設定用戶端緩衝時間echo "用戶端緩衝時間為:".$cache_expire."分鐘\n";session_start();?>
運行結果如下:
3,Session資料庫儲存
在php中Session 的資料庫儲存主要是通過 session_set_save_handler()函數來實現的。 具體文法如下:
bool session_set_save_handler(string open,string close,string read,string write,string destroy,string gc);
下面分別將這6個參數(函數)分裝起來,在學習完物件導向編程後,大家會有一個更加清晰的認識。
(1) 封裝session_open()函數,代碼如下:
function _session_open($save_path,$session_name){global $handle;$handle =mysql_connect('localhost','root','root')or die('資料庫連接失敗!');mysql_select_db('db_database11',$handle)or die('資料庫不存在');return(true);}
(2)封裝session_close()函數,代碼如下:
function _session_close(){global $handle;mysql_close($handle);return(true);}
(3) 封裝 session_read()函數,在函數中設定目前時間的UNIX時間戳記,根據$key尋找Session名片及內容。代碼如下:
function _session_read($key){golbal $handle; //全域變數$handle 串連資料庫$time =time(); //設定目前時間$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()函數,函數設定Session的失效時間,尋找到Session的名稱及內容,如果查詢結果為空白。則將頁面中Session根據session_id,session_name,失效時間,插入資料庫中。如果查詢結果不為空白,則根據 $key修改資料庫中Session儲存資訊。代碼如下:
function _session_write($key,$data){global $handle;$time = 60*60;$lapse_time =time()+$time; //得到UNIX時間戳記$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){ //沒有結果$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(),根據$key刪除資料庫中的Sessin.代碼如下:
function _session_destroy(){global $handle;$sql ="delete from tb_session where session_key ='$key'";$result =mysql_query($sql,$handle);}
(6)封裝session_gc(),根據Session的失效時間刪除到期的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);}
具體的代碼運行就不做了,等到學完物件導向的編程的時候給大家示範下哦。
以上就是本文的全部內容,希望對大家的學習有所協助。