удалить файлы сеанса через некоторое время от создания - PullRequest
7 голосов
/ 24 января 2010

Я сохраняю свои сеансы в другом каталоге из каталога / 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 ]

4 голосов
/ 24 января 2010

спасибо, но я думаю, что смогу решить это сам

решение было простым

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

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

  }
4 голосов
/ 24 января 2010

Тебе это не нужно. PHP сам реализует механизм сборки мусора для удаления несуществующих файлов сеансов. Это будет намного эффективнее, чем все остальное, что вы могли бы написать сами, используя PHP.

См. session.gc _ * опции конфигурации PHP для получения дополнительной информации.

3 голосов
/ 24 января 2010

Я делал это раньше с помощью задания cron, которое удаляло файлы сеансов старше X (по какой-то причине автоматическая очистка PHP не выполняла эту работу). К сожалению, это, вероятно, не вариант, если бы вы работали на управляемом хосте, который не дает вам возможности настраивать задания cron.

1 голос
/ 20 марта 2012
// 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 голосов
/ 20 октября 2016
// 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);
  }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...