2015年12月11日 星期五

設定session時間的長短


● session 的參數說明:
1、session.use_cookies:默認的值是「1」,代表 SessionID 使用 Cookie 來傳遞,反之就是使用 Query_String 來傳遞。
2、session.name:這個就是 SessionID 儲存的變量名稱,可能是 Cookie,也可能是 Query_String 來傳遞,默認值是「PHPSESSID」。
3、session.cookie_lifetime「單位(秒)- 86400 表示是1天24小時」:這個代表 SessionID 在客戶端 Cookie 儲存的時間,預設值是 0,代表瀏覽器一關閉 SessionID 就作廢,就是因為這個所以 Session 不能永久使用!
4、session.gc_maxlifetime「單位(秒)」:這個是 Session 數據在 Server 端儲存的時間,如果超過這個時間,那麼 Session 數據就自動刪除!

如果不想用程式設定,可以使用如下設定:
.htaccess 裡加上這一行
php_value session.save_path [你的session save_path]

減少session存活時間(到幾秒鐘)
The session garbage collector will fire as part of session_start(). Since you're changing the setting AFTER you start a session, you're too late to change the settings.
session的垃圾收集器(garbage collector )將做為session_start()的一部分。因為你改變php.ini設定( ini_set('session.gc_maxlifetime',60); )在session啟動之後,這時候改變設定已經太晚了。

這中間發生了什麼事?
1. The session file sits in its temp directory
session檔案在temp資料夾( php.ini的session.save_path )產生
2. You session_start(), causing PHP to open/lock the file, read its contents, deserialize the data, and incidentally, possibly update the session file's "last used" timestamp (atime on Unix boxes).
你的session_start() 導致php打開/鎖定這個檔案、讀取她的內容、反序列化成資料。然後順便更新這個session檔案最後使用的時間戳
3. If the stars and moon are aligned correctly with Neptune ascendant in the fifth house, the session garbage collector MAY fire up and delete old session files.
如果時間到了,垃圾收集器(garbage collector )可能會開火然後刪除舊的session檔案
4. The garbage collector will happily iterate through the session directory, and delete any files which are older than the max_liftime, BUT WILL NOT DELETE ANY FILES CURRENTLY OPEN/IN USE. Since you've not closed()'d your session, your session's file is still in use, so will not get deleted.
垃圾收集器會隨他高興的遍歷session資料夾並刪除早於max_liftime的文件,但不會刪除現在正在打開和使用的檔案。因為你還沒關閉你的session。你的session檔案依然在使用中,將不會被刪除

如果你寫一個程式像下面這樣
ini_set('session.gc_maxlifetime', 5); // set GC probability to max, short session lifetime, etc...
session_start(); // populate $_SESSION
session_write_close(); // dump $_SESSION out to file, close file, release lock.
sleep(7); // Sleep for 7 seconds;
session_start(); // re-populate $_SESSION;

That might increase the probability that the garbage collector.
這可能會增加機率讓垃圾蒐集器清掉你的session檔案(實測後沒成功過...)


參考資料:
http://blog.xuite.net/tunedgr02/data/14681314-%E3%80%90PHP+session+maxlifetime+%E3%80%91%E8%87%AA%E8%A1%8C%E8%AA%BF%E6%95%B4%E8%87%AA%E5%B7%B2%E6%9E%B6%E8%A8%AD+PHP+%E7%B6%B2%E7%AB%99%E6%88%96%E8%99%9B%E6%93%AC%E4%B8%BB%E6%A9%9F%E4%B8%AD%E7%9A%84+session+%E6%99%82%E9%96%93%E9%95%B7%E7%9F%AD!!   【PHP session maxlifetime 】自行調整自已架設 PHP 網站或虛擬主機中的 session 時間長短!!
http://stackoverflow.com/questions/12032306/why-ini-setsession-gc-maxlifetime-60-doesnt-work  why ini_set('session.gc_maxlifetime',60) doesn't work?
http://stackoverflow.com/questions/3428153/php-ini-setsession-gc-maxlifetime-5-why-it-doesnt-end-the-session  PHP - ini_set('session.gc_maxlifetime', 5) - Why it doesn't end the session?




沒有留言:

張貼留言