日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

深入理解session过期机制

發(fā)布時(shí)間:2023/12/15 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深入理解session过期机制 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
首先得明白:session的過期時(shí)間由兩方面決定的;?
?1存儲在客戶端的$_COOKIE['PHPSESSID']的過期時(shí)間(默認(rèn)cookie名稱為PHPSESSID,可通過php.ini中的session.name修改。)?
?2.存儲在服務(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í)是做了兩件事:? 1, 檢查客戶端發(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)過序列化的。? 2, 如果客戶端沒有傳來$_COOKIE['PHPSESSID'],就會(huì)有服務(wù)端產(chǎn)生一個(gè)隨機(jī)的$_COOKIE['PHPSESSID']并存儲在客戶端。?

明白上面這些,我們可以通過下面的方法修改session的過期時(shí)間:?
1.session_set_cookie_params('50');//修改$_COOKIE['PHPSESSID'],的生存時(shí)間為50秒 ?

(或者可以這樣: ? setcookie(session_name(),session_id(),time()+50);) ?

2.ini_set('session.gc_maxlifetime','50');//設(shè)置session文件的有效時(shí)間為50秒 ?

但是 ,可能有些朋友會(huì)做這樣? 一個(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的概率會(huì)消失,應(yīng)該不會(huì)碰到吧,呵呵),這是為什么呢?我不是已經(jīng)設(shè)置了? .ini_set('session.gc_maxlifetime','50');了 嗎?再做一個(gè)實(shí)驗(yàn):這時(shí)你偽造一個(gè)$_COOKIE['PHPSESSID'],值為剛才你記錄下的,神奇的事發(fā)生了,你依然可以訪問剛才舊的 session文件!!!(雖然他已經(jīng)過期),只要這個(gè)文件沒被刪除,用相對應(yīng)得$_COOKIE['PHPSESSID']依然可以進(jìn)行訪問!!! ?

那我們設(shè)置ini_set('session.gc_maxlifetime', '50');還有什么意義呢 ?這就涉及的GC(GarbageCollector)的回收機(jī)制。?
?默 認(rèn)情況下,session.gc_probability = 1,session.gc_divisor=1000,也就是說有1/1000的可能性會(huì)啟動(dòng)GC。GC的工作,就是掃描所有的session信息,用當(dāng) 前時(shí)間減去session的最后修改時(shí)間(modifieddate),同session.gc_maxlifetime參數(shù)進(jìn)行比較,如果生存時(shí)間已經(jīng) 超過gc_maxlifetime,就把該session刪除。只要沒有啟動(dòng)GC,即使session過期,也仍舊可通過相對應(yīng) 得$_COOKIE['PHPSESSID']進(jìn)行訪問!?
???
原文參考:? http://www.jb51.net/article/26890.htm ?
????????????????? http://www.php100.com/html/webkaifa/PHP/PHPyingyong/2012/0621/10583.html

總結(jié)

以上是生活随笔為你收集整理的深入理解session过期机制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。