
這篇文章主要介紹了php session的應用程式詳細介紹的相關資料,需要的朋友可以參考下
php session進階應用
session在web技術中非常重要,由於網頁是一種無狀態的連接程序,因此無法得知使用者的瀏覽狀態。透過session則可以記錄使用者的相關訊息,以供使用者再次以此身分對web伺服器提交要求時確認。
例如:使用者在瀏覽電子商務網站的時候,如果沒有session,那麼使用者每次瀏覽就需要輸入帳號密碼。
相關專題推薦:php session (包含圖文、影片、案例)
1, Session 暫存檔案
在伺服器中,如果將使用者所有的Session都儲存到暫存目錄中,會降低伺服器的安全性和效率。打開伺服器儲存的網站會非常的慢。
使用PHP函數session_save_path()函數儲存Session暫存文件,可以緩解因暫存文件的儲存導致的伺服器效率降低和網站開啟緩慢的問題。
範例程式碼如下:
1 2 3 4 5 6 | <?php
$path = "./tmp/" ;
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()函數,語法如下:
1 | string session_cache_limiter([string cache_limiter]);
|
登入後複製
其中參數cache_limiter 為public 或private 。同事session不是在伺服器端,而是在客戶端。在伺服器中沒有顯示。
快取時間的設置,使用的是函數 session_cache_expire()語法如下:
1 | int session_cache_expire([int new_cahche_expire]);
|
登入後複製
參數new_cahche_expire 是session快取的時間數字,單位分鐘。
注意:
這兩個session函數必須在session_start()函數之前執行
session 快取頁面的範例程式碼如下:
1 2 3 4 5 6 7 8 9 10 11 | <?php
session_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()函數,程式碼如下:###
1 2 3 4 5 6 | 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()函數,程式碼如下:###
1 2 3 4 5 | function _session_close(){
global $handle ;
mysql_close( $handle );
return (true);
}
|
登入後複製
###(3)封裝session_read()函數,在函數中設定目前時間的UNIX時間戳,依照$key找出Session名片及內容。程式碼如下:###
1 2 3 4 5 6 7 8 9 10 11 12 | function _session_read( $key ){
golbal $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儲存資訊。程式碼如下:###
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | function _session_write( $key , $data ){
global $handle ;
$time = 60*60;
$lapse_time =time()+ $time ;
$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.程式碼如下:###
1 2 3 4 5 | function _session_destroy(){
global $handle ;
$sql = "delete from tb_session where session_key ='$key'" ;
$result =mysql_query( $sql , $handle );
}
|
登入後複製
###(6)封裝session_gc(),依照Session的失效時間刪除過期的Session,範例程式碼如下:###
1 2 3 4 5 6 | 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 );
}
|
登入後複製
###具體的程式碼運行就不做了,等到學完物件導向的程式設計的時候給大家示範下哦。 ######以上就是本文的全部內容,希望對大家的學習有所幫助。 ######相關推薦:#########php及codeigniter使用###session###-cookie的方法詳解##############完美解決ajax存取遇到Session失效的問題###############PHPSession入庫/存入redis的方法詳解##########
以上是php session的應用詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!