Session詳解

1缠俺、session.gc_maxlifetime?控制 session 有效期?

PHP的session有效期默認(rèn)是1440秒(24分鐘),如果客戶端超過24分鐘沒有刷新凶掰,當(dāng)前session會被回收来破,失效。

可以修改php.ini的session.gc_maxlifetime來設(shè)置session的生命周期德频,但并不能保證在超過這一時間后session信息立即會刪除苍息。因為GC是按機率啟動的缩幸,可能在某一個長時間內(nèi)都沒有被啟動壹置。那么大量的session在超過session.gc_maxlifetime后仍然有效。

session.gc_maxlifetime = 60表示當(dāng)session文件在60秒后沒有被訪問表谊,則視為過期session钞护,等待GC回收。

2爆办、session.gc_probability,session.gc_divisor說明

session.gc_probability 與 session.gc_divisor? 合起來定義了在每個會話初始化時啟動 gc(garbage collection 垃圾回收)進程的概率难咕。此概率用 gc_probability/gc_divisor 計算得來。例如 1/1000 意味著在每個請求中有 0.1% 的概率啟動 gc 進程距辆。如果session.gc_probability = 1000余佃,那么GC進程在每次執(zhí)行session_start()時都會調(diào)用,執(zhí)行收跨算。session.gc_divisor 默認(rèn)為 1000爆土。?

比如:session.gc_maxlifetime=60,session.gc_divisor=1000诸蚕,session.gc_probability=1步势,就表示每一千個用戶調(diào)用session_start()的時候,就百分百的會執(zhí)行一次垃圾回收機制背犯,將磁盤上沒用的session文件刪除坏瘩。

注意:一般對于一些大型的門戶網(wǎng)站,建議將session.gc_divisor調(diào)大一點漠魏,減少開銷

把session.gc_probability/session.gc_divisor的機率提高倔矾,會有幫助,但會對性能造成嚴(yán)重影響柱锹。

3破讨、舉例說明

php.ini配置:

session.gc_maxlifetime = 30

session.gc_divisor ? ? ? ? = 1000

session.gc_probability ? = 1000

因為gc進程被調(diào)用的概率是通過gc_probability/gc_divisor 計算得來的,這里我將session.gc_probability改成1000奕纫,而session.gc_divisor 默認(rèn)情況下也是1000提陶。則gc進程在每次執(zhí)行session_start()函數(shù)的時候都會被調(diào)用到。

開啟兩個會話匹层,如圖

過30秒隙笆,刷新一個人頁面之后,如圖:

雖說效果很明顯升筏,但是線上環(huán)境強烈建議將gc_probability參數(shù)調(diào)低撑柔,使用默認(rèn)值即可,因為太高會影響性能

4您访、嚴(yán)格控制session過期方法

(1)永不過期設(shè)置铅忿,打開php.ini,修改參數(shù)

? ? ? ? ? 1灵汪、session.use_cookies:

? ? ? ? ? ? ? ?把這個的值設(shè)置為1檀训,利用cookie來傳遞sessionid

? ? ? ? ? 2柑潦、session.cookie_lifetime:

? ? ? ? ? ? ? 這個代表SessionID在客戶端Cookie儲存的時間,默認(rèn)是0峻凫,代表瀏覽器一關(guān)閉SessionID就作廢……就? ? ? ? ? ? ? ? 是因為這個所以PHP的 session不能永久使用渗鬼! 那么我們把它設(shè)置為一個我們認(rèn)為很大的數(shù)字吧, ? ? ? ? ? ? ? ? ? ? ? 99999999荧琼。

? ? ? ? ? 3譬胎、session.gc_maxlifetime:

? ? ? ? ? ? ?這個是Session數(shù)據(jù)在服務(wù)器端儲存的時間,如果超過這個時間命锄,那么Session數(shù)據(jù)就自動刪除堰乔! 那么我 ? ? ? ? ? ? ?們也把它設(shè)置為99999999。

(2)

ini_set("session.gc_maxlifetime",24 * 3600);

session_start();

$lifetime = 24 * 3600;

setcookie(session_name(), session_id(), time() + $lifetime, '/');

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

echo '設(shè)置成功='.$_SESSION['name'];

(3)

ini_set("session.gc_maxlifetime",24 * 3600);

$lifetime = 24 * 3600;

session_set_cookie_params($lifetime);

session_start();

$_SESSION['num'] = '6055';

echo '設(shè)置成功=='.$_SESSION['num'];

(4)使用memcache/redis來保存session脐恩,設(shè)置過期時間浩考,因為memcache/redis的回收機制不是按機率的,可以確保session過期后失效被盈。

(5)只使用php實現(xiàn)析孽,創(chuàng)建一個session類,在session寫入時只怎,把過期時間也寫入袜瞬。讀取時,根據(jù)過期時間判斷是否已過期身堡。

//Session控制類

classSession{

? ? ? ? ? ? ? /**

? ? ? ? ? ? ? ? * 設(shè)置session

? ? ? ? ? ? ? ? * @param String $name? session name

? ? ? ? ? ? ? ? * @param Mixed $data? session data

? ? ? ? ? ? ? ? * @param Int? $expire 超時時間(秒)

? ? ? ? ? ? ? ?*/

? ? ? ? ? ? ? ? public static function set($name,$data,$expire=600){

? ? ? ? ? ? ? ? ? ? ? ? ? $session_data=array();

? ? ? ? ? ? ? ? ? ? ? ? ? $session_data['data'] =$data;

? ? ? ? ? ? ? ? ? ? ? ? ? $session_data['expire'] = time()+$expire;

? ? ? ? ? ? ? ? ? ? ? ? ? $_SESSION[$name] =$session_data;

? ? ? ? ? ? ? ? ?}

? ? ? ? ? ? ? ? ?/**

? ? ? ? ? ? ? ? ? * 讀取session

? ? ? ? ? ? ? ? ? * @param String $name session name

? ? ? ? ? ? ? ? ? * @return Mixed

? ? ? ? ? ? ? ? ? */

? ? ? ? ? ? ? ? ? ?public static function get($name){

? ? ? ? ? ? ? ? ? ? ? ? ? if(isset($_SESSION[$name])){

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?if($_SESSION[$name]['expire']>time()){

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?return$_SESSION[$name]['data'];

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?}else{

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? self::clear($name);

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ? ? return ?false;

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? /**

? ? ? ? ? ? ? ? ? ? ? * 清除session

? ? ? ? ? ? ? ? ? ? ? * @param String $name session name

? ? ? ? ? ? ? ? ? ? ? */

? ? ? ? ? ? ? ? ? ? ? private static function clear($name){

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? unset($_SESSION[$name]);

? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

demo:

session_start();

$data='123456';

session::set('test',$data, 10);

echosession::get('test');// 未過期邓尤,輸出

//echosession::get('test');// 已過期

5、清除session(刪除服務(wù)端與客戶端)

session_start();

$_SESSION=array();

if (ini_get("session.use_cookies")) {

? ? ? ? ? ? $params = session_get_cookie_params();

? ? ? ? ? ? setcookie(session_name(), '', time() - 42000,$params["path"], $params["domain"] $params["secure"], $params["httponly"]);

}

session_destroy();

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末贴谎,一起剝皮案震驚了整個濱河市汞扎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌擅这,老刑警劉巖澈魄,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異仲翎,居然都是意外死亡痹扇,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門溯香,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鲫构,“玉大人,你說我怎么就攤上這事玫坛〗岜浚” “怎么了?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長炕吸。 經(jīng)常有香客問我伐憾,道長,這世上最難降的妖魔是什么算途? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任塞耕,我火速辦了婚禮蚀腿,結(jié)果婚禮上嘴瓤,老公的妹妹穿的比我還像新娘。我一直安慰自己莉钙,他們只是感情好廓脆,可當(dāng)我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著磁玉,像睡著了一般停忿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蚊伞,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天席赂,我揣著相機與錄音,去河邊找鬼时迫。 笑死颅停,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的掠拳。 我是一名探鬼主播癞揉,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼溺欧!你這毒婦竟也來了喊熟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤姐刁,失蹤者是張志新(化名)和其女友劉穎芥牌,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體聂使,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡胳泉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了岩遗。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扇商。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖宿礁,靈堂內(nèi)的尸體忽然破棺而出案铺,到底是詐尸還是另有隱情,我是刑警寧澤梆靖,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布控汉,位于F島的核電站笔诵,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏姑子。R本人自食惡果不足惜乎婿,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望街佑。 院中可真熱鬧谢翎,春花似錦、人聲如沸沐旨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽磁携。三九已至褒侧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谊迄,已是汗流浹背闷供。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留统诺,地道東北人歪脏。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像篙议,于是被迫代替她去往敵國和親唾糯。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,947評論 2 355

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

  • Cookie與Session詳解讀書筆記鬼贱,從概念移怯、操作、應(yīng)用这难、注意事項以及區(qū)別等幾方面詳細(xì)闡述兩者的基礎(chǔ)知識舟误,它們...
    奮斗live閱讀 1,082評論 0 2
  • Web服務(wù)器跟蹤客戶狀態(tài)通常有四種方法:建立含有跟蹤數(shù)據(jù)的隱藏字段;重寫包含額外參數(shù)的url姻乓;使用持續(xù)的cooki...
    exmexm閱讀 1,930評論 0 0
  • Session的聲明與使用 Session的設(shè)置不同于Cookie嵌溢,必須先啟動,在PHP中必須調(diào)用session_...
    尋回驕傲閱讀 2,949評論 0 18
  • 簡單使用 讀寫session 銷毀session 讀sessionID 寫sessionID 登錄超時的應(yīng)用 在每...
    一只好奇的茂閱讀 1,140評論 0 22
  • php.ini設(shè)置,上傳大文件: post_max_size = 128Mupload_max_filesize ...
    bycall閱讀 6,763評論 3 64