最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

php中Session的生成機制、回收機制和存儲機制探究

 更新時間:2014年08月19日 09:37:05   投稿:junjie  
這篇文章主要介紹了php中Session的生成機制、回收機制和存儲機制探究,可以幫助大家對Session有一個全面的了解,需要的朋友可以參考下

1、php中session的生成機制

我們先來分析一下PHP中是怎么生成一個session的。設計出session的目的是保持每一個用戶的各種狀態(tài)來彌補HTTP協(xié)議的不足(無狀態(tài))。我們現(xiàn)在有一個疑問,我們都知道session是保存在服務器的,既然它用于保持每一個用戶的狀態(tài)那它利用什么來區(qū)別用戶的呢?這個時候就得借助cookie了。當我們在代碼中調(diào)用session_start();時,PHP會同時往SESSION的存放目錄(默認為/tmp/)和客戶端的cookie目錄各生成一個文件。session文件名稱像這樣:

格式為sess_{SESSIONID} ,這時session文件中沒有任何內(nèi)容,當我們在session_start();添加了這兩行代碼:

復制代碼 代碼如下:

$_SESSION['name'] = 'wanchun0222';

$_SESSION['blog'] = 'coderbolg.net';


這時文件就有內(nèi)容了:
復制代碼 代碼如下:

name|s:11:"wanchun0222";blog|s:13:"coderbolg.net";

這時再看看cookie:

可以看到服務器為我們自動生成了一個cookie,cookie名稱為"PHPSESSID",cookie內(nèi)容是一串字符,其實這串字符就是{SESSIONID}。也許你已經(jīng)明白了,當我們使用session時,PHP就先生成一個唯一的SESSIONID號(如2bd170b3f86523f1b1b60b55ffde0f66),再在我們服務器的默認目錄下生成一個文件,文件名為sess_{SESSIONID},同時在當前用戶的客戶端生成一個cookie,內(nèi)容已經(jīng)說過了。這樣PHP會為每一個用戶生成一個SESSIONID,也就是說一個用戶一個session文件。PHP第一次為某個用戶使用session時就向客戶端寫入了cookie,當這個用戶以后訪問時,瀏覽器會帶上這個cookie,PHP在拿到cookie后就讀出里面的SESSIONID,拿著這個SESSIONID去session目錄下找session文件。找到后在調(diào)用$_SESSION['blog']的時候顯示出來。

2、php中session的過期回收機制

我們明白了session的生成及工作原理,發(fā)現(xiàn)在session目錄下會有許多session文件。當然這些文件一定不是永遠存在的,PHP一定提供了一種過期回收機制。在php.ini中session.gc_maxlifetime為session設置了生存時間(默認為1440s)。如果session文件的最后更新時間到現(xiàn)在超過了生存時間,這個session文件就被認為是過期的了。在下一次session回收的時候就會被刪除。那下一次session回收是在什么時候呢?這和php請求次數(shù)有關(guān)的。在PHP內(nèi)部機制中,當php被請求了N次后就會有一次觸發(fā)回收機制。到底是請求多少次觸發(fā)一次是通過以下兩個參數(shù)控制的:

復制代碼 代碼如下:

session.gc_probability = 1

session.gc_divisor = 100


這是php.ini的默認設置,意思是每100次PHP請求就有一次回收發(fā)生。概率是 gc_probability/gc_divisor 。我們了解了服務器端的session過期機制,再來看看客戶端的cookie的過期機制。

如果cookie失效了瀏覽器自然發(fā)送不了cookie到服務器,這時即使服務器的session文件存在也沒用,因為PHP不知道要讀取哪個session文件。我們知道PHP的cookie過期時間是在創(chuàng)建時設置的,那么PHP在創(chuàng)建session的同時為客戶端創(chuàng)建的cookie的生命周期是多久呢?這個在php.ini中有設置:session.cookie_lifetime 。這個值默認是0,代表瀏覽器一關(guān)閉SESSIONID就失效。那就是說我們把session.gc_maxlifetime和session.cookie_lifetime設置成同一個值就可以控制session的失效時間了。

3、php中session的客戶端存儲機制

由上面的介紹我們可以知道,如果用戶關(guān)閉了cookie,那我們的session就完全沒法工作了。是的,確實是這樣。php中session的客戶端存儲機制只有cookie嗎?不是的。既然我們的SESSIONID 不能通過cookie傳遞到各個頁面,那我們還有另一個法寶,就是通過頁面GET傳值的方式。

PHP可以在cookie被禁用時自動通過GET方式跨頁傳遞SESSIONID,前提是設置php.ini的session.use_trans_sid為1。這時當我們在客戶端禁用了cookie時使用了session,并在當前頁面通過點擊鏈接到另一頁面時,PHP會自動在鏈接上添加SESSIONID參數(shù),像這樣:nextpage.php?SESSIONID=2bd170b3f86523f1b1b60b55ffde0f66。我想你應該看到了這種方式的缺點:好像不夠安全啊。

相關(guān)文章

  • PHP代碼維護,重構(gòu)變困難的4種原因分析

    PHP代碼維護,重構(gòu)變困難的4種原因分析

    這篇文章主要介紹了PHP代碼維護,重構(gòu)變困難的4種原因,分析了代碼維護與重構(gòu)的注意事項與感想,需要的朋友可以參考下
    2016-01-01
  • PHP基礎知識介紹

    PHP基礎知識介紹

    這篇文章介紹了PHP的一些基礎知識,有需要的朋友可以參考一下
    2013-09-09
  • php通過sort()函數(shù)給數(shù)組排序的方法

    php通過sort()函數(shù)給數(shù)組排序的方法

    這篇文章主要介紹了php通過sort()函數(shù)給數(shù)組排序的方法,實例分析了php中sort()函數(shù)的功能及相關(guān)使用技巧,非常具有實用價值,需要的朋友可以參考下
    2015-03-03
  • php版阿里云OSS圖片上傳類詳解

    php版阿里云OSS圖片上傳類詳解

    這篇文章主要介紹了php版阿里云OSS圖片上傳類,結(jié)合具體實例形式分析了php版阿里云OSS圖片上傳類的功能、定義、使用方法與相關(guān)注意事項,需要的朋友可以參考下
    2016-12-12
  • PHP獲取用戶的瀏覽器與操作系統(tǒng)信息的代碼

    PHP獲取用戶的瀏覽器與操作系統(tǒng)信息的代碼

    PHP為了準確獲得訪問用戶的瀏覽器 操作系統(tǒng)信息,以便返回給不同的用戶不同的需求,比如不同的IE用戶,分別加載不同的CSS文件
    2012-09-09
  • php中通過eval實現(xiàn)字符串格式的計算公式

    php中通過eval實現(xiàn)字符串格式的計算公式

    有時候我們對每一種產(chǎn)品都有一個提成公式,而這個計算提成的公式是以字符串格式存在表中的,當我們用這個計算公式時,他并不像我們寫的:$a=2+3*5;這樣簡單的能計算出結(jié)果,而它是個字符串,所以,我們就必須把字符串轉(zhuǎn)化為我們能夠處理的結(jié)果
    2017-03-03
  • PHP中使用curl偽造IP的簡單方法

    PHP中使用curl偽造IP的簡單方法

    這篇文章主要介紹了PHP中使用curl偽造IP的簡單方法,作者也提到了相關(guān)的一些缺陷,需要的朋友可以參考下
    2015-08-08
  • php 接口類與抽象類的實際作用

    php 接口類與抽象類的實際作用

    很多人搞不清楚接口和抽象類的區(qū)別!下面我把我的理解與大家共享!
    2009-11-11
  • PHP封裝的完整分頁類示例

    PHP封裝的完整分頁類示例

    這篇文章主要介紹了PHP封裝的完整分頁類,涉及php數(shù)值計算、URL構(gòu)造、sql查詢等相關(guān)操作技巧,需要的朋友可以參考下
    2018-08-08
  • 有關(guān)JSON以及JSON在PHP中的應用

    有關(guān)JSON以及JSON在PHP中的應用

    簡 單地說,JSON 可以將 JavaScript 對象中表示的一組數(shù)據(jù)轉(zhuǎn)換為字符串,然后就可以在函數(shù)之間輕松地傳遞這個字符串,或者在異步應用程序中將字符串從 Web 客戶機傳遞給服務器端程序。
    2010-04-04

最新評論

松江区| 焦作市| 丰原市| 台州市| 淮阳县| 石狮市| 获嘉县| 东台市| 桦甸市| 大理市| 思南县| 闵行区| 思南县| 浙江省| 天峨县| 恩平市| 肥东县| 三门峡市| 临汾市| 乌鲁木齐县| 定南县| 万源市| 云林县| 正蓝旗| 杭锦后旗| 旌德县| 海兴县| 南投县| 时尚| 临江市| 英超| 彩票| 安阳市| 当涂县| 会泽县| 扎囊县| 上虞市| 四会市| 保定市| 闸北区| 峨眉山市|