首頁 > 後端開發 > php教程 > php session的應用程式碼實例詳細介紹

php session的應用程式碼實例詳細介紹

黄舟
發布: 2023-03-06 20:14:02
原創
1580 人瀏覽過

這篇文章主要介紹了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[&#39;userName&#39;]=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 快取頁面的範例程式碼如下:

<?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();

?>
登入後複製

運行結果如下:


php session的應用程式碼實例詳細介紹

#3,Session資料庫儲存



php 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(&#39;localhost&#39;,&#39;root&#39;,&#39;root&#39;)or die(&#39;数据库连接失败!&#39;);
mysql_select_db(&#39;db_database11&#39;,$handle)or die(&#39;数据库不存在&#39;);
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 = &#39;$key&#39; and session_time>&#39;$time&#39;";
$result =mysql_query($ssql,$handle);
$row =mysql_fetch_array($result);
if($row){
return($row[&#39;session_data&#39;]);
}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 =&#39;$key&#39; and session_time>$lapse_time";
$result =mysql_query($sql,$handle);
if(mysql_num_rows($result)==0){  //没有结果
$sql ="insert into tb_session values(&#39;$key&#39;,&#39;$data&#39;,$lapse_time)";
$result =mysql_query($sql,$handle);
}else{
$sql ="update tb_session set session_key=&#39;$key&#39;,session_data =&#39;$data&#39;,session_time =$lapse_time where session_key =&#39;$key&#39;";
$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 =&#39;$key&#39;";
$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);
}
登入後複製

以上是php session的應用程式碼實例詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板