熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> PHP編程 >> 正文

解析PHP的session過期設置

2013-11-15 12:33:34  來源: PHP編程 

  網上很多人給出了解答修改php配置文件中的sessiongc_maxlifetime如果想了解更多session回收機制繼續閱讀(本文環境php

概述每 一次php請求會有/的概率(默認值)觸發“session回收”如果“session回收”發生那就會檢查/tmp/sess_*的文 件如果最後的修改時間到現在超過了秒(gc_maxlifetime的值)就將其刪除意味著這些session過期失效

   session在server端(一般是Apache with PHP module)如何存在的?
默認的php會將session保存在/tmp目錄下文件名為這個樣子sess_aabfddcebafb每一個文件對應了一個session(會話)
more /tmp/sess_aabfddcebafb
username|s::”jiangfeng”;admin|s::”″;
#變量名|類型:長度:值
刪除這裡的session文件就表示對應的session失效了

   session在client端(一般是浏覽器)如何存在的?
session 在浏覽器端只需要保存session ID(由server端生成的唯一ID)就可以了有兩種保存方式在cookie中在url裡面如果cookie中保存session ID就可以看到浏覽器的cookie中有一個PHPSESID變量如果是URL傳遞的就可以看到形如:
indexphp?PHPSESID=aabfddcebafb的URL(在server端通過sessionuse_cookies來控制使用哪一種方式)

   在server端php如何判斷session文件是否過期?
如果”最後的修改時間”到”現在”超過了gc_maxlifetime(默認是)秒這個session文件就被認為是過期了在下一次session回收的時候如果這個文件仍然沒有被更改過這個session文件就會被刪除(session就過期了)
簡單的說如果我登錄到某網站如果在秒(默認值)內沒有操作過那麼對應的session就認為是過期了
所以修改phpini文件中的gc_maxlifetime變量就可以延長session的過期時間了(例如我們把過期時間修改為秒)
sessiongc_maxlifetime =
然後重啟你的web服務(一般是apache)就可以了
注意php裡面session過期使用了回收機制這裡設置時間為如果session在秒內沒有被修改過那麼在下一次“回收”時才真的被刪除

   session“回收”何時發生?
默認情況下每一次php請求就會有/的概率發生回收所以可能簡單的理解為“每次php請求就有一次回收發生”這個概率是通過以下參數控制的
#概率是gc_probability/gc_divisor
sessiongc_probability =
sessiongc_divisor =
注意假設這種情況gc_maxlifetime=如果某個session文件最後修改時間是秒之前那麼在下一次回收(/的概率)發生前這個session仍然是有效的
注意如 果你的session使用sessionsave_path中使用別的地方保存sessionsession回收機制有可能不會自動處理過期 session文件這時需要定時手動(或者crontab)的刪除過期的sessioncd /path/to/sessions; find cmin + | xargs rm

   一些特殊情況
因為回 收機制會檢查文件的“最後修改時間”所以如果某個會話是活躍的但是session的內容沒有改變過那麼對應的session文件也就沒有改變過回 收機制會認為這是一個長時間沒有活躍的session而將其刪除這是我們不願看到的可以通過增加如下的簡單代碼解決這個問題
<?php if(!isset($_SESSION[last_access])||(time()$_SESSION[last_access])>) $_SESSION[last_access] = time(); ?>
代碼會每隔嘗試修改修改一次session
總結如果想修改session過期時間修改變量gc_maxlifetime就可以了php的session采用被動的回收機制(garbage collection)過期的session文件不會自己消失而是通過觸發“回收”來處理過期的session


From:http://tw.wingwit.com/Article/program/PHP/201311/21174.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.