2010-01-24 40 views
7

我正在將會話保存在/ temp目錄中的另一個目錄中。 說/session目錄(使用session_save_path("session")從創建時起刪除會話文件

此外,還有一個代碼來創建和註銷10分鐘後終止會話。

但我提到,如果用戶登錄並例如關閉了他的計算機,我的註銷和會話銷燬代碼劑量不會運行,因此會話文件將保留在會話目錄中。

我想知道是否有辦法在創建後的一段時間內刪除/session中的會話文件?

我用這個代碼,它

if ($handle = opendir('sessions')) { 

    while (false !== ($file = readdir($handle))) { 
     if (filectime($file)< (time()-600)) { // 600 = 10*60 
     unlink($file); 
     } 
    } 
    } 

,但沒有工作,我認爲這可能不是filectime($file)

感謝

回答

4

感謝,但我想我可以自我解決困難

的解決方案很簡單

if ($handle = opendir('sessions')) { 

    foreach (glob("sessions/sess_*") as $filename) { 
    if (filemtime($filename) + 400 < time()) { 
     @unlink($filename); 
    } 
    } 

    } 
4

你不應該需要的是得到的創建時間。 PHP本身實現了一個垃圾收集機制來刪除不存在的會話文件。這比使用PHP編寫自己的任何其他東西都要高效得多。

有關更多信息,請參閱PHP的session.gc_*配置選項。

+0

看來,它只能在/ tmp目錄我有4個會議會議文件在那裏(我自己的會話目錄),從4天前還活着! – Alireza 2010-01-24 04:51:27

+1

我很確定它適用於您當前的會話路徑。請記住,每次運行腳本時GC機制實際啓動的可能性很小,以避免太多開銷。默認情況下,每次使用會話訪問腳本時有1%的機會。 – zneak 2010-01-24 05:07:46

+0

因此,如何將「session.gc_probability」更改爲100(默認值爲1) – Alireza 2010-01-24 05:16:52

3

我以前用cron作業完成了這項工作,並刪除了比X舊的會話文件(出於某種原因,PHP的自動清理沒有完成這項工作)。不幸的是,如果這是在託管主機上,並不能讓您設置cron作業,那麼這可能不是您的選擇。

1
// Delete old sessions 
    if (substr(ini_get('session.save_path'), 0, 4) != '/tmp') { 
    foreach (glob(rtrim(ini_get('session.save_path'), '/') .'/sess_*') as $filename) { 
     if (filemtime($filename) + ini_get('session.gc_maxlifetime') < time()) { 
     @unlink($filename); 
     } 
    } 
    } 
0
// get the session files directory 
$dir = session_save_path("session"); 

//clear cache 
clearstatcache(); 

// Open a directory, and read its contents 

if (is_dir($dir)){ 

    // we iterate through entire directory 
    if ($dh = opendir($dir)){ 
    while (($file = readdir($dh)) !== false){ 

    //get the last acces date of each file 
    @$time_stamp=fileatime($file); 

    //check if it is older than... 600, and assign a text flag: with value "to delete" (when old enough) or "---" (when young enough) 
    $to_delete = ($time_stamp<time()-600) ? 'to delete!' : '---'; 

    //format acces date to a human readible format 
    @$date = date("F d Y H:i:s.",fileatime($file)); 

    //output stats on the screen 
    echo "file:" . $file . "Last access: ".$date.", ".$to_delete."<br>"; 

    //INFO 
    //depending on wishes, you can modify flow of the script using variables 
    // particulary useful is $to_delete -> you can easily covert it to true/false format 
    //to control the scrip 
    } 

    closedir($dh); 
    } 

} 
相關問題