您好,登錄后才能下訂單哦!
session怎么正確的在php中應用?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
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 緩存頁面的示例代碼如下:
<?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()函數,代碼如下:
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); }
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。