深入理解 Session 的過期機(jī)制

首先得明白:

session 的過期時(shí)間由兩方面決定的;

  • 存儲在客戶端的 $_COOKIE[‘PHPSESSID’] 的過期時(shí)間(默認(rèn)cookie名稱為 PHPSESSID,可通過 php.ini 中的 session.name 修改跃捣。)

  • 存儲在服務(wù)器端的相對應(yīng)的 session 文件(session 文件名和上述 cookie的值一一對應(yīng)),默認(rèn)為 1440 秒茂装,即 24 分鐘

ok伦籍,現(xiàn)在詳細(xì)闡述上述兩者的關(guān)系: 當(dāng)執(zhí)行 session_start() 的時(shí)候,其實(shí)是做了兩件事:

  • 檢查客戶端發(fā)送過來的的所有 cookie(當(dāng)然也包括 $_COOKIE[‘PHPSESSID’], 如果有的話)贷痪,根據(jù) $_COOKIE[‘PHPSESSID’] 的值(這是由 apache 產(chǎn)生的隨機(jī)字符串幻妓,如 0lkbd2se458r600m2m7o1r4ic5)來訪問 相對應(yīng)的 session文件(如:sess_0lkbd2se458r600m2m7o1r4ic5,我的默認(rèn)存儲在‘E:\wamp\tmp’下)劫拢,這兩者是一 一對應(yīng)的關(guān)系肉津。打個(gè)比喻:
$_COOKIE[‘PHPSESSID’] 就是一把開啟寶盒的鑰匙,而那個(gè)寶盒就是 session 文件舱沧,里面存儲著用戶的重要 信息妹沙,也就是 session 的值, 如:$_SESSION[‘uid’]=1, $_SESSION[‘username’]=’name’, $_SESSION[‘pwd’]=’pwd’, 當(dāng)然文件里面的值是經(jīng)過序列化的熟吏。
  • 如果客戶端沒有傳來 $_COOKIE[‘PHPSESSID’]距糖,就會有服務(wù)端產(chǎn)生一個(gè)隨機(jī)的 $_COOKIE[‘PHPSESSID’] 并存儲在客戶端。

明白上面這些牵寺,我們可以通過下面的方法修改 session 的過期時(shí)間:

// 修改 $_COOKIE[‘PHPSESSID’] 的生存時(shí)間為50秒
session_set_cookie_params(’50’);    

// 或者可以這樣: 
setcookie(session_name(), session_id(), time()+50);
// 設(shè)置 session 文件的有效時(shí)間為 50 秒
ini_set(‘session.gc_maxlifetime’, ’50’);

但是悍引,可能有些朋友會做這樣一個(gè)試驗(yàn), 在 50 秒內(nèi)獲取 $_COOKIE[‘PHPSESSID’] 的值并記錄下來(如黑客截獲這個(gè) cookie)缸剪,這樣等 50 秒過后發(fā)現(xiàn)原先的 $_COOKIE[‘PHPSESSID’] 值確實(shí)不存在了吗铐,而出現(xiàn)了一個(gè)新的 $_COOKIE[‘PHPSESSID’],但是 ‘E:\wamp \tmp’ 下的舊 session 文件卻沒有消失(默認(rèn)只有 1/1000 的概率會消失杏节,應(yīng)該不會碰到吧唬渗,呵呵),這是為什么呢奋渔?我不是已經(jīng)設(shè)置了 .ini_set(‘session.gc_maxlifetime’,’50’); 了嗎镊逝?再做一個(gè)實(shí)驗(yàn):這時(shí)你偽造一個(gè) $_COOKIE[‘PHPSESSID’], 值為剛才你記錄下的,神奇的事發(fā)生了嫉鲸,你依然可以訪問剛才舊的 session 文件3潘狻!P(雖然他已經(jīng)過期)座菠,只要這個(gè)文件沒被刪除,用相對應(yīng)得 $_COOKIE[‘PHPSESSID’] 依然可以進(jìn)行訪問L偈鳌T〉巍!

那我們設(shè)置 ini_set(‘session.gc_maxlifetime’, ’50’); 還有什么意義呢岁钓?這就涉及的 GC(GarbageCollector) 的回收機(jī)制升略。

默認(rèn)情況下微王,session.gc_probability = 1session.gc_divisor=1000品嚣,也就是說有 1/1000 的可能性會啟動 GC炕倘。GC 的工作,就是掃描所有的 session 信息翰撑,用當(dāng)前時(shí)間減去 session 的最后修改時(shí)間(modifieddate)罩旋,同session.gc_maxlifetime 參數(shù)進(jìn)行比較,如果生存時(shí)間已經(jīng)超過gc_maxlifetime额嘿,就把該 session 刪除瘸恼。只要沒有啟動 GC,即使 session 過期册养,也仍舊可通過相對應(yīng)得 $_COOKIE[‘PHPSESSID’] 進(jìn)行訪問东帅!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市球拦,隨后出現(xiàn)的幾起案子靠闭,更是在濱河造成了極大的恐慌,老刑警劉巖坎炼,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件愧膀,死亡現(xiàn)場離奇詭異,居然都是意外死亡谣光,警方通過查閱死者的電腦和手機(jī)檩淋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來萄金,“玉大人蟀悦,你說我怎么就攤上這事⊙醺遥” “怎么了日戈?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長孙乖。 經(jīng)常有香客問我浙炼,道長,這世上最難降的妖魔是什么唯袄? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任弯屈,我火速辦了婚禮,結(jié)果婚禮上恋拷,老公的妹妹穿的比我還像新娘资厉。我一直安慰自己,他們只是感情好梅掠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布酌住。 她就那樣靜靜地躺著,像睡著了一般阎抒。 火紅的嫁衣襯著肌膚如雪酪我。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天且叁,我揣著相機(jī)與錄音都哭,去河邊找鬼。 笑死逞带,一個(gè)胖子當(dāng)著我的面吹牛欺矫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播展氓,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼穆趴,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了遇汞?” 一聲冷哼從身側(cè)響起未妹,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎空入,沒想到半個(gè)月后络它,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡歪赢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年化戳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片埋凯。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡点楼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出递鹉,到底是詐尸還是另有隱情盟步,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布躏结,位于F島的核電站却盘,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏媳拴。R本人自食惡果不足惜黄橘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望屈溉。 院中可真熱鬧塞关,春花似錦、人聲如沸子巾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至椰于,卻和暖如春怠益,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背瘾婿。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工蜻牢, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人偏陪。 一個(gè)月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓抢呆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親笛谦。 傳聞我的和親對象是個(gè)殘疾皇子抱虐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容

  • PHP中的session有效期默認(rèn)是1440秒(24分鐘)【weiweiok 注:php5里默認(rèn)的是180分】,也...
    littlexjing閱讀 4,792評論 0 1
  • Session的聲明與使用 Session的設(shè)置不同于Cookie揪罕,必須先啟動梯码,在PHP中必須調(diào)用session_...
    尋回驕傲閱讀 2,949評論 0 18
  • 敬愛的羅文先生: 自從哈伯德先生將您的事跡寫入他的文章,百余年來好啰,您一直是敬業(yè)轩娶、忠誠和勤奮的象征。但是框往,羅文先生鳄抒,...
    LCL龍華閱讀 245評論 0 0
  • 這樣的夜如此寧靜许溅,有幾只夜蟲在窗外若有若無地輕聲訴說著,那首《風(fēng)中搖曳的光》如水般叮咚流過我的心靈秉版,...
    曉琴閱讀 561評論 2 0
  • 小孫女是個(gè)早產(chǎn)兒贤重。出生時(shí)才三斤八兩,因不足月清焕,故在保溫箱里放了十多天才抱回家并蝗。第一眼見小孫女,心中還有些激動秸妥,但看...
    老樹2018閱讀 625評論 1 4