Platform  3.1
PHP API documentation
 All Data Structures Namespaces Files Functions Variables Pages
Class.SessionUtils.php
Go to the documentation of this file.
1 <?php
2 /*
3  * @author Anakeen
4  * @license http://creativecommons.org/licenses/by-nc-sa/2.0/fr/ Anakeen - licence CC
5  * @package FDL
6 */
7 
9 {
10 
11  private $dbaccess;
12 
13  function __construct($dbaccess)
14  {
15  $this->dbaccess = $dbaccess;
16  }
17 
18  function getSessionMaxAge()
19  {
20  $query = new DbObj($this->dbaccess);
21  $err = $query->exec_query("SELECT val FROM paramv WHERE name = 'CORE_SESSIONMAXAGE'");
22  if ($err != "") {
23  error_log(__CLASS__ . "::" . __FUNCTION__ . " " . "exec_query returned with error: " . $err);
24  return false;
25  }
26  if ($query->numrows() <= 0) {
27  error_log(__CLASS__ . "::" . __FUNCTION__ . " " . "exec_query returned an empty result set");
28  return false;
29  }
30  $res = $query->fetch_array(0);
31  if (is_numeric($res['val'])) {
32  return $res['val'] . " seconds";
33  }
34  return $res['val'];
35  }
36 
37  function getSessionMaxAgeSeconds($default = "1 week")
38  {
39  $session_maxage = $this->getSessionMaxAge($default);
40  if ($session_maxage === false) {
41  return false;
42  }
43  if (preg_match('/^(\d+)\s+(\w+)/i', $session_maxage, $m)) {
44  $maxage = $m[1];
45  $unit = strtolower($m[2]);
46  switch (substr($unit, 0, 1)) {
47  case 'y':
48  $maxage = $maxage * 364 * 24 * 60 * 60;
49  break; # years
50 
51  case 'm':
52  if (substr($unit, 0, 2) == 'mo') {
53  $maxage = $maxage * 30 * 24 * 60 * 60;
54  break; # months
55 
56  } else {
57  $maxage = $maxage * 60;
58  break; # minutes
59 
60  }
61  case 'w':
62  $maxage = $maxage * 7 * 24 * 60 * 60;
63  break; # weeks
64 
65  case 'd':
66  $maxage = $maxage * 24 * 60 * 60;
67  break; # days
68 
69  case 'h':
70  $maxage = $maxage * 60 * 60;
71  break; # hours
72 
73  case 's':
74  break; # seconds
75 
76  default:
77  return FALSE;
78  }
79  return $maxage;
80  }
81  return FALSE;
82  }
83 
85  {
86  include_once ('WHAT/Lib.Prefix.php');
87 
88  global $pubdir;
89 
90  $session_maxage = $this->getSessionMaxAgeSeconds();
91  if ($session_maxage === false) {
92  $err = sprintf("Malformed CORE_SESSIONMAXAGE");
93  return $err;
94  }
95  $maxage = time() - $session_maxage;
96 
97  $sessionDir = sprintf("%s/session", $pubdir);
98  $dir = opendir($sessionDir);
99  if ($dir === false) {
100  $err = sprintf("Error opening directory '%s'.", $sessionDir);
101  return $err;
102  }
103 
104  $sessions = array();
105  while ($file = readdir($dir)) {
106  if (preg_match("/^sess_(.+)$/", $file, $m)) {
107  $sess_id = $m[1];
108  $sess_file = sprintf("%s/%s", $sessionDir, $file);
109  $stat = @stat($sess_file);
110  if ($stat !== false && $stat['mtime'] < $maxage) {
111  @unlink($sess_file);
112  }
113  }
114  }
115  closedir($dir);
116 
117  return "";
118  }
119 }
120 ?>
← centre documentaire © anakeen - published under CC License - Dynacase