如何理解PHP會話-創(chuàng)新互聯(lián)

本篇內(nèi)容介紹了“如何理解PHP會話”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

成都創(chuàng)新互聯(lián)公司堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的播州網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

1、導(dǎo)讀


從文題目看,<簡單PHP會話(Session)說明> 是已經(jīng)圈定了本文的內(nèi)容范圍,試圖闡明Session(文中對會話稱為Session) 在PHP語言中是如何實現(xiàn)以及使用的,重點在于基本理解后的使用。

文章思路是首先搞清楚session是什么東西,Session有什么用,Session使用的套路是什么,PHP中是如何使用的。


2、會話(Session)說明

開始前,首先推薦一本基礎(chǔ)理論書《HTTP權(quán)威指南》,是程序員基礎(chǔ)必備知識,作者有電子版,有需要的可以留言。


a. Session的由來

幾乎每個人都上網(wǎng),數(shù)以億計的數(shù)據(jù)在網(wǎng)絡(luò)中相互傳輸,數(shù)據(jù)之所以能夠安全的傳輸,是基于HTTP協(xié)議的,很是耳熟能詳是吧。其實HTTP協(xié)議所干的事情就是提供完成你的網(wǎng)絡(luò)訪問一系列方法,雙方構(gòu)建了一次訪問,原則上就是一個會話建立了。說一個例子:小明在瀏覽器中輸入https://www.baidu.com/(HTTPS是HTTP的加密版本,相比是增加了SSL加密層),這是小明對百度發(fā)起了一個請求,說:“我要看你的界面”,百度的服務(wù)器們收到信息,信息中包括了小名想干的事情,同時包括了小明的地址(否則百度不知道把內(nèi)容給誰了),服務(wù)器核對信息OK,對小明這個請求進行備案,發(fā)送出小名想要的東西,一次完整的請求結(jié)束了。 這就是一次會話,會話的核心在于小明的信息備案(其實還涉及到TCP/IP的連接問題,這個與本文無關(guān),忽略)。

其實與其說是構(gòu)建了一個Session,倒不如說將一次訪問概括為一個Session。

b. Session能干什么用

從上面內(nèi)容可以得到,每一個訪問都是一個會話,服務(wù)器都要備案信息,這是有開銷的,同時呢,也不大可能同一個人連續(xù)訪問十次二十次就構(gòu)建保存十次二十次,一個是增加開銷,另一個是也比較蠢了。也就是說,一個人(確切說是同一個電腦和瀏覽器),在某個特定時間內(nèi),能夠復(fù)用一個Session的,為什么在特定時間內(nèi)呢?因為Session是有默認的過期時間,過期后服務(wù)器就清理掉了(如果不這樣,你想想世界那么多人,來一個保留一個,太虧)。


ok,既然同一個人,多次訪問都是一個Session(不要懷疑服務(wù)器無法判別是同一個人,具體可以看上面推介的書),而且每次訪問的內(nèi)容都是做備案的,那么也就是說,你Session周期內(nèi)所有的行為服務(wù)器都是知道的,那么接下來重要的作用就來了,服務(wù)器通過對你的訪問請求分析,能夠獲知到這個特定用戶的行為偏好的,通過做一定的分析,能夠推送一些用戶喜歡關(guān)心的數(shù)據(jù),廣告定向也就是這么來的。


當然可能還有其他的用戶,性能等等之類的,個人不是特別理解機理,這里就這樣。


3、PHP中Session的使用

通過上面的啰嗦,可以發(fā)現(xiàn),Session這個概念其實是在服務(wù)器端發(fā)生的。PHP提供了一系列的配置、函數(shù)等,很好的實現(xiàn)Session功能。Session支持在 PHP 中是在并發(fā)訪問時由一個方法來保存某些數(shù)據(jù).從而使你能夠構(gòu)建更多的定制程序 從而提高你的 web 網(wǎng)站的吸引力. 一個訪問者訪問你的 web 網(wǎng)站將被分配一個的 id, 就是所謂的session id. 這個 id 可以存儲在用戶端的一個 cookie 中,也可以通過 URL 進行傳遞.會話支持允許你將請求中的數(shù)據(jù)保存在超全局數(shù)組$_SESSION中. 當一個訪問者訪問你的網(wǎng)站,PHP 將自動檢查(如果 session.auto_start 被設(shè)置為 1)或者在你要求下檢查(明確通過session_start()或者隱式通過session_register()) 當前session id 是否是先前發(fā)送的請求創(chuàng)建. 如果是這種情況, 那么先前保存的環(huán)境將被重建.

a. php中session基本用法

通過為每個獨立用戶分配的Session ID,可以實現(xiàn)針對不同用戶分別存儲數(shù)據(jù)的功能。 會話通常被用來在多個頁面請求之間保存及共享信息。 一般來說,Session ID 通過 cookie 的方式發(fā)送到瀏覽器,并且在服務(wù)器端也是通過會話 ID 來取回會話中的數(shù)據(jù)。 如果請求中不包含會話 ID 信息,那么 PHP 就會創(chuàng)建一個新的Session,并為新創(chuàng)建的Session分配新的 ID。

Session的工作流程很簡單。當開始一個Session時,PHP 會嘗試從請求中查找Session ID (通常通過Session cookie), 如果請求中不包含Session ID 信息,PHP 就會創(chuàng)建一個新的Session。 Session開始之后,PHP 就會將Session中的數(shù)據(jù)設(shè)置到 $_SESSION變量中。 當 PHP 停止的時候,它會自動讀取$_SESSION中的內(nèi)容,并將其進行序列化, 然后發(fā)送給會話保存管理器器來進行保存。默認情況下,PHP 使用內(nèi)置的文件Session保存管理器(files)來完成Session的保存。 也可以通過配置項session.save_handler(php.ini中配置項目)來修改所要采用的Session保存管理器。 對于文件Session保存管理器,Session會話數(shù)據(jù)保存到配置項session.save_path (php.ini中配置項目)所指定的位置??梢酝ㄟ^調(diào)用函數(shù)session_start來手動開始一個會話。 如果配置項session.auto_start 設(shè)置為1, 那么請求開始的時候,Session會自動開始。PHP 腳本執(zhí)行完畢之后,session會自動關(guān)閉。 同時,也可以通過調(diào)用函數(shù)session_wirte_close() 來手動關(guān)閉會話。

b. php中session信息在php.ini中配置

這部分內(nèi)容放在這里說是因為,不說明前面問題,鬼知道php.ini中的配置是什么東西。 上面提到的session.save_handler和session.save_path,這兩個就是php.ini中的配置項目,這里面這塊不細說,因為php手冊實在是太詳細了。本文默認模式是files。

c. php中的session機制

session_start()是session機制的開始,session會判斷當前是否有$_COOKIE[session_name()];session_name()返回保存session_id的COOKIE鍵值,如果不存在會生成一個session_id,然后把生成的session_id作為COOKIE的值傳遞到客戶端.相當于執(zhí)行了下面COOKIE 操作。相反,如果存在session_id =$_COOKIE[session_name];然后去session.save_path指定的文件夾里去找名字為'SESS_'.session_id()的文件.讀取文件的內(nèi)容反序列化,然后放到$_SESSION中。

在會話結(jié)束的時候,會執(zhí)行Session寫入操作或是手工執(zhí)行session_write_close()操作。

代碼里面銷毀Session一般有三個方法,  


1. setcookie(session_name(),session_id(),time() -8000000,..); //退出登錄前執(zhí)行

2. usset($_SESSION); //這會刪除所有的$_SESSION數(shù)據(jù),刷新后,有COOKIE傳過來,但是沒有數(shù)據(jù)。

3. session_destroy(); //刪除$_SESSION 刪除session文件以及session_id

附錄,引用網(wǎng)絡(luò)上的一段代碼,作為結(jié)尾吧。


<span >  </span>//SESSION初始化的時候調(diào)用 
   function open($save_path, $session_name) 
   { 
    global $sess_save_path; 
    $sess_save_path=$save_path; 
    return(true); 
   } 
 
   //關(guān)閉的時候調(diào)用 
   function close() 
   { 
    return(true); 
   } 
 
   function read($id) 
   { 
    global $sess_save_path; 
    $sess_file="$sess_save_path/sess_$id"; 
    return (string) @file_get_contents($sess_file); 
   } 
   //腳本執(zhí)行結(jié)束之前,執(zhí)行寫入操作 
   function write($id,$sess_data) 
   { 
 
    global$sess_save_path; 
 
    $sess_file="$sess_save_path/sess_$id"; 
    if ($fp= @fopen($sess_file,"w")) { 
     $return=fwrite($fp,$sess_data); 
     fclose($fp); 
     return$return; 
    } else { 
     return(false); 
    } 
 
   } 
     
   function destroy($id) 
   { 
    global $sess_save_path; 
 
    $sess_file="$sess_save_path/sess_$id"; 
    return(@unlink($sess_file)); 
   } 
 
   function gc($maxlifetime) 
   { 
    global$sess_save_path; 
 
    foreach (glob("$sess_save_path/sess_*") as$filename) { 
     if (filemtime($filename) +$maxlifetime<time()) { 
      @unlink($filename); 
     } 
    } 
    return true; 
   }

“如何理解PHP會話”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

當前文章:如何理解PHP會話-創(chuàng)新互聯(lián)
URL標題:http://muchs.cn/article44/csjcee.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、企業(yè)建站、電子商務(wù)、網(wǎng)站排名、搜索引擎優(yōu)化、Google

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化