开发者

delete session files after a time from creation

I am saving my sessions in another directory from /temp directory. say /session directory.( using session_save_path("session") )

also, there is a code to kill the session after 10 minuets from creation and logout.

but I mentioned that if the user logs in and for example shut down his computer, my log out and session destroy code doses not run, so the session file 开发者_JAVA技巧will remain in the session directory.

I wanted to know is there is a way to delete session files in /session after a time from creation?

I used this code for it

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

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

but, not working, I think it couldn't get the creation time by filectime($file)

thanks


You shouldn't need that. PHP itself implements a garbage collection mechanism to delete defunct session files. It's going to be much more efficient than anything else you could write yourself using PHP.

See the session.gc_* configuration options of PHP for more infos.


thanks but I think I could solve it by myself

the solution was simple

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

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

  }


I've done this before with a cron job that went in and deleted session files older than X (for some reason PHP's automatic cleanup wasn't doing the job). Unfortunately that's probably not an option you'd have if this is on a managed host that doesn't give you the ability to set up cron jobs.


// 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);
      }
    }
  }


// 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);
  }

}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜