一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

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

1、php中session的生成機制

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

格式為sess_{SESSIONID} ,這時session文件中沒有任何內容,當我們在session_start();添加了這兩行代碼:
復制代碼 代碼如下:
$_SESSION['name'] = 'wanchun0222';

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

這時文件就有內容了:
復制代碼 代碼如下:
name|s:11:"wanchun0222";blog|s:13:"coderbolg.NET";

這時再看看cookie:

可以看到服務器為我們自動生成了一個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的生成及工作原理,發(fā)現(xiàn)在session目錄下會有許多session文件。當然這些文件一定不是永遠存在的,php一定提供了一種過期回收機制。在php.ini中session.gc_maxlifetime為session設置了生存時間(默認為1440s)。如果session文件的最后更新時間到現(xiàn)在超過了生存時間,這個session文件就被認為是過期的了。在下一次session回收的時候就會被刪除。那下一次session回收是在什么時候呢?這和php請求次數(shù)有關的。在php內部機制中,當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,代表瀏覽器一關閉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參數(shù),像這樣:nextpage.php?SESSIONID=2bd170b3f86523f1b1b60b55ffde0f66。我想你應該看到了這種方式的缺點:好像不夠安全啊。

php技術php中Session的生成機制、回收機制和存儲機制探究,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 中文字幕综合久久久久 | 国产第一区二区三区在线观看 | www.色婷婷 | 精品欧美一区二区在线观看 | 一道精品一区二区三区 | 日本精品久久久中文字幕 | 亚洲国产天堂久久综合 | caoporn97人人做人人爱最新 | 欧美色欧美亚洲另类二区不卡 | 欧美成人性色大片在线观看 | 久久国产精品1区2区3区网页 | 国产一级特黄一级毛片 | 国产一级免费在线观看 | 日韩久久一区二区三区 | 综合色视频| 色爱区综合激情五月综合色 | 一区二区视屏 | 国产精品99久久免费观看 | 福利视频91 | 日韩精品一区二区三区中文字幕 | 99久久精品一区二区三区 | 欧美成人三级 | 国内一区二区三区精品视频 | 免费小视频网站 | 久久精品国产99精品最新 | 国产高清视频免费最新在线 | 国产成人性色视频 | 成人在线免费小视频 | 中国a毛片 | 欧亚精品一区二区三区 | 精品国产品香蕉在线观看75 | 日本网址在线观看 | 伊人色色网 | 国内第一永久免费福利视频 | 国产日韩一区二区 | 久久久精品久久久久久久久久久 | 中文字幕亚洲自拍 | 国产成人在线观看网站 | 国产亚洲一区二区在线观看 | 久久精品国产无限资源 | 国产日韩精品一区在线不卡 |