程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> 關於PHP中Session文件過多的問題

關於PHP中Session文件過多的問題

編輯:PHP綜合

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

一、session文件是什麼

文件一般為 /tmp/sess_4b1e384ad74619bd212e236e52a5a174If

username|s:9:"test";admin|s:1:"0";

二、session“回收”何時發生

默認情況下,每一次php請求,就會有1/100的概率發生回收,所以可能簡單的理解為“每100次php請求就有一次回收發生”。這個概率是通過以下參數控制的

#概率是gc_probability/gc_divisor
session.gc_probability = 1
session.gc_divisor = 100
  • 假設這種情況gc_maxlifetime=120,如果某個session文件最後修改時間是120秒之前,那麼在下一次回收(1/100的概率)發生前,這個session仍然是有效的。

  • 如果你的session使用session.save_path中使用別的地方保存session,session回收機制有可能不會自動處理過期session文件。這時需要定時手動(或者crontab)的刪除過期的session

三、設置session存儲目錄

使用php5-fpm的話, 修改/etc/php5/fpm/php.ini, 修改或添加下面一行:

session.save_path = 3;600:/tmp

但是這樣的話,當文件太多的時候find查找會很慢

  • 設置 session.save_path = 3;600;/tmp
  • session file 就會存成 /tmp/4/e/3/sess_4b1e384ad74619bd212e236e52a5a174If

四、清除session的腳本

#!/bin/sh

find /tmp/php-session -cmin +24 -name "sess_*" -and -size 0 -delete > /dev/null 2>&1
find /tmp/php-session -cmin +1440 -name "sess_*" -delete > /dev/null 2>&1

這裡的時間我們可以通過 session.gc_maxlifetime 來獲取

其他方式

  • 使用memcache 等 ,(session.save_handler = memcache)

  • 使用cookie,但是cookie得加密

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved