创建一段时间后删除会话文件

时间:2010-01-24 04:35:16

标签: php session automation

我将会话保存在/ 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)

获得创建时间

谢谢

5 个答案:

答案 0 :(得分:4)

你不应该那样做。 PHP本身实现了一个垃圾收集机制来删除已解散的会话文件。它将比使用PHP自己编写的任何其他内容更有效。

有关更多信息,请参阅PHP的session.gc_*配置选项。

答案 1 :(得分:4)

谢谢,但我想我可以自己解决它

解决方案很简单

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

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

  }

答案 2 :(得分:3)

之前我已经完成了一个cron作业,并删除了早于X的会话文件(出于某种原因,PHP的自动清理没有完成工作)。不幸的是,如果托管主机无法设置cron作业,那么这可能不是您的选择。

答案 3 :(得分: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);
      }
    }
  }

答案 4 :(得分: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);
  }

}