今天小編給大家分享的是PHP的session的刪除原理和垃圾處理機(jī)制,相信大部分人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,話不多說(shuō),一起往下看吧。
成都創(chuàng)新互聯(lián)自2013年起,先為安遠(yuǎn)等服務(wù)建站,安遠(yuǎn)等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為安遠(yuǎn)企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。在PHP中,沒(méi)有任何變量指向這個(gè)對(duì)象時(shí),這個(gè)對(duì)象就成為垃圾。PHP會(huì)將其在內(nèi)存中銷毀;這是PHP的GC垃圾處理機(jī)制,防止內(nèi)存溢出。
GC的工作就是掃描所有的Session
信息,用當(dāng)前時(shí)間減去session
最后修改的時(shí)間,同session.gc_maxlifetime
參數(shù)進(jìn)行比較,如果生存時(shí)間超過(guò)gc_maxlifetime
(默認(rèn)24分鐘),就將該session刪除。
當(dāng)一個(gè)有效的請(qǐng)求發(fā)生時(shí),PHP 會(huì)根據(jù)全局變量 session.gc_probability
和session.gc_divisor
的值,來(lái)決定是否啟用一個(gè)GC, 在默認(rèn)情況下,
session.gc_probability = 1 session.gc_divisor = 100
也就是說(shuō)有1%的可能性啟動(dòng)GC(也就是說(shuō)100個(gè)請(qǐng)求中只有一個(gè)gc會(huì)伴隨100個(gè)中的某個(gè)請(qǐng)求而啟動(dòng)).
但是,如果你Web服務(wù)器有多個(gè)站點(diǎn),多個(gè)站點(diǎn)時(shí),GC處理session可能會(huì)出現(xiàn)意想不到的結(jié)果,原因就是:GC在工作時(shí),并不會(huì)區(qū)分不同站點(diǎn)的session.
那么這個(gè)時(shí)候怎么解決呢?
1、修改session.save_path
,或使用session_save_path()
讓每個(gè)站點(diǎn)的session
保存到一個(gè)專用目錄;
2、提高GC的啟動(dòng)率,當(dāng)GC的啟動(dòng)率提高,系統(tǒng)的性能也會(huì)相應(yīng)減低,不推薦;
3、在代碼中判斷當(dāng)前session
的生存時(shí)間,利用session_destroy()
刪除;
session.gc_probability = 1 session.gc_divisor = 100 session.gc_maxlifetime = 1440
這三個(gè)配置組合構(gòu)建服務(wù)端session的垃圾回收機(jī)制
session.gc_probability
與session.gc_divisor
構(gòu)成執(zhí)行session清理的概率,理論上的解釋為服務(wù)端定期有一定的概率調(diào)用gc函數(shù)來(lái)對(duì)session進(jìn)行清理,清理的概率為:gc_probability/gc_divisor
比如:1/100
表示每一個(gè)新會(huì)話初始化時(shí),有
1%
的概率會(huì)啟動(dòng)垃圾回收程序,清理的標(biāo)準(zhǔn)為session.gc_maxlifetime
定義的時(shí)間。
session.gc_divisor
與 session.gc_probability
合起來(lái)定義了在每個(gè)會(huì)話初始化時(shí)啟動(dòng) gc(garbage collection 垃圾回收)
進(jìn)程的概率。
此概率用 gc_probability/gc_divisor
計(jì)算得來(lái)。例如 1/100 意味著在每個(gè)請(qǐng)求中有 1%
的概率啟動(dòng) gc 進(jìn)程。session.gc_divisor
默認(rèn)為 100
。
比如:
session.gc_maxlifetime = 60 session.gc_divisor = 1000 session.gc_probability = 1
就表示每一千個(gè)用戶調(diào)用session_start()
的時(shí)候,就百分百的會(huì)執(zhí)行一次垃圾回收機(jī)制,將磁盤(pán)上沒(méi)用的session文件刪除。
注意:一般對(duì)于一些大型的門(mén)戶網(wǎng)站,建議將session.gc_divisor
調(diào)大一點(diǎn),減少開(kāi)銷
接下來(lái),我通過(guò)一個(gè)例子演示下,如何配置才能讓調(diào)用gc(垃圾回收)進(jìn)程呢!
通過(guò)配置php.ini文件,修改以下幾個(gè)信息:
session.gc_maxlifetime = 60//當(dāng)session文件在60s后還沒(méi)有被訪問(wèn)的話,則該session文件將會(huì)被視為“垃圾文件”,并且等待gc(垃圾回收)進(jìn)程的調(diào)用的時(shí)候被清理掉 session.gc_probability = 1000
因?yàn)間c進(jìn)程被調(diào)用的概率是通過(guò)gc_probability/gc_divisor
計(jì)算得來(lái)的,這里我將session.gc_probability
改成1000
,而session.gc_divisor 默認(rèn)情況下也是1000
。則gc進(jìn)程在每次執(zhí)行session_start()函數(shù)的時(shí)候都會(huì)被調(diào)用到。
開(kāi)啟三個(gè)會(huì)話,則創(chuàng)建三個(gè)對(duì)應(yīng)的session
文件,當(dāng)每個(gè)文件在60秒內(nèi)都沒(méi)被調(diào)用的話,就會(huì)被當(dāng)成是“垃圾文件”,等到gc進(jìn)程調(diào)用的時(shí)候,“垃圾文件”就會(huì)被unlink
,因?yàn)橹拔乙呀?jīng)通過(guò)修改php.ini
配置文件,將gc被調(diào)用的概率改成百分百,所以接下來(lái),如果我重新使用任何一個(gè)瀏覽器刷新下頁(yè)面的時(shí)候,三個(gè)session
文件,應(yīng)該只剩下一個(gè)了
session.save_handler = files
默認(rèn)為file,定義session在服務(wù)端的保存方式,file
意為把sesion
保存到一個(gè)臨時(shí)文件里,如果我們想自定義別的方式保存(比如用數(shù)據(jù)庫(kù)),則需要把該項(xiàng)設(shè)置為user
。
看完上述內(nèi)容,你們對(duì)PHP的session的刪除原理和垃圾處理機(jī)制大概了解了嗎?如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道,感謝各位的閱讀!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
網(wǎng)站欄目:PHP的session的刪除原理和垃圾處理機(jī)制-創(chuàng)新互聯(lián)
網(wǎng)站網(wǎng)址:http://jinyejixie.com/article28/hgscp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)、全網(wǎng)營(yíng)銷推廣、標(biāo)簽優(yōu)化、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容