91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何分析Session的生成機制、回收機制和存儲機制

發布時間:2021-12-17 16:22:03 來源:億速云 閱讀:137 作者:柒染 欄目:大數據

如何分析Session的生成機制、回收機制和存儲機制,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

1、php中session的生成機制

我們先來分析一下PHP中是怎么生成一個session的。設計出session的目的是保持每一個用戶的各種狀態來彌補HTTP協議的不足(無狀態)。

我們現在有一個疑問,我們都知道session是保存在服務器的,既然它用于保持每一個用戶的狀態那它利用什么來區別用戶的呢?這個時候就得借助cookie了。當我們在代碼中調用session_start();時,PHP會同時往SESSION的存放目錄(默認為/tmp/)和客戶端的cookie目錄各生成一個文件。session文件名稱像這樣:

如何分析Session的生成機制、回收機制和存儲機制

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

$_SESSION['name'] = 'phper';$_SESSION['blog'] = 'startphp.cn';

這時文件就有內容了:

name|s:5:"phper";blog|s:11:"startphp.cn";

這時再看看cookie:

如何分析Session的生成機制、回收機制和存儲機制

可以看到服務器為我們自動生成了一個cookie,cookie名稱為"PHPSESSID",cookie內容是一串字符,其實這串字符就是{SESSIONID}。

也許你已經明白了,當我們使用session時,PHP就先生成一個唯一的SESSIONID號(如2bd170b3f86523f1b1b60b55ffde0f66),再在我們服務器的默認目錄下生成一個文件,文件名為sess_{SESSIONID},同時在當前用戶的客戶端生成一個cookie,內容已經說過了。這樣PHP會為每一個用戶生成一個SESSIONID,也就是說一個用戶一個session文件。

PHP第一次為某個用戶使用session時就向客戶端寫入了cookie,當這個用戶以后訪問時,瀏覽器會帶上這個cookie,PHP在拿到cookie后就讀出里面的SESSIONID,拿著這個SESSIONID去session目錄下找session文件。找到后在調用$_SESSION['blog']的時候顯示出來。

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

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

session.gc_probability = 1session.gc_divisor = 100

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

如果cookie失效了瀏覽器自然發送不了cookie到服務器,這時即使服務器的session文件存在也沒用,因為PHP不知道要讀取哪個session文件。我們知道PHP的cookie過期時間是在創建時設置的,那么PHP在創建session的同時為客戶端創建的cookie的生命周期是多久呢?

這個在php.ini中有設置:session.cookie_lifetime 。這個值默認是0,代表瀏覽器一關閉SESSIONID就失效。那就是說我們把session.gc_maxlifetime和session.cookie_lifetime設置成同一個值就可以控制session的失效時間了。

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

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

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

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

神木县| 昌吉市| 静宁县| 通海县| 和田市| 阿克苏市| 海原县| 昌吉市| 高州市| 武汉市| 基隆市| 临江市| 个旧市| 通化市| 商丘市| 望谟县| 平凉市| 秀山| 无锡市| 永泰县| 桓台县| 廉江市| 阿拉善盟| 宝丰县| 南昌县| 吉首市| 扶沟县| 大冶市| 尚志市| 梅河口市| 高唐县| 临猗县| 巨鹿县| 宕昌县| 雷山县| 龙门县| 阜南县| 鞍山市| 天峻县| 法库县| 陇南市|