Detect more robots
[infodrom.org/www.zeitungsliste.de] / lib / session.inc
1 <?php
2
3 function session_invalidate($dest='')
4 {
5   global $cfg;
6   global $_SESSION;
7
8   db_query(sprintf('DELETE FROM online WHERE uid = %d', $_SESSION['uid']));
9
10   setcookie($cfg['session'], '', time()-42000, '/');
11   session_destroy();
12   $_SESSION = array();
13
14   header("Location: " . $cfg['home'] . $dest);
15
16   exit;
17 }
18
19 function userstatus_info()
20 {
21   global $cfg;
22
23   $ret = array();
24
25   $query = 'SELECT count(*) FROM online';
26   $sth = db_query($query);
27   if ($sth === false) {
28     $ret[0] = 0;
29   } else {
30     $row = pg_fetch_array($sth, 0);
31     $ret[0] = $row[0];
32   }
33
34   $query = 'SELECT count(*) FROM users';
35   $sth = db_query($query);
36   if ($sth === false) {
37     $ret[1] = 0;
38   } else {
39     $row = pg_fetch_array($sth, 0);
40     $ret[1] = $row[0];
41   }
42
43   $query = 'SELECT count(*) FROM zeitungen WHERE deleted IS false';
44   $sth = db_query($query);
45   if ($sth === false) {
46     $ret[2] = 0;
47   } else {
48     $row = pg_fetch_array($sth, 0);
49     $ret[2] = $row[0];
50   }
51
52   $query = 'SELECT count(*) FROM zeitung_tags';
53   $sth = db_query($query);
54   if ($sth === false) {
55     $ret[3] = 0;
56   } else {
57     $row = pg_fetch_array($sth, 0);
58     $ret[3] = $row[0];
59   }
60
61   $query = 'SELECT count(*) FROM tags';
62   $sth = db_query($query);
63   if ($sth === false) {
64     $ret[4] = 0;
65   } else {
66     $row = pg_fetch_array($sth, 0);
67     $ret[4] = $row[0];
68   }
69
70   return $ret;
71 }
72
73 function session_update()
74 {
75   global $cfg;
76   global $_SESSION;
77
78   $info = userstatus_info();
79
80   $_SESSION['online'] = $info[0];
81   $_SESSION['users'] = $info[1];
82   $_SESSION['zeitungen'] = $info[2];
83   $_SESSION['ztags'] = $info[3];
84   $_SESSION['tags'] = $info[4];
85 }
86
87 function session_init()
88 {
89   global $cfg;
90   global $_COOKIE;
91   global $_SERVER;
92   global $_SESSION;
93
94   if (isset($_COOKIE[$cfg['session']])) {
95     session_name($cfg["session"]);
96     session_start();
97
98     if ($_SESSION["REMOTE_ADDR"] != $_SERVER["REMOTE_ADDR"] ||
99         !isset($_SESSION["uid"]))
100       session_invalidate('login.html?from=session');
101
102     $query = sprintf('UPDATE online SET activity = now() WHERE uid = %d', $_SESSION['uid']);
103     $sth = db_query($query);
104     if (pg_affected_rows($sth) < 1) {
105       $query = sprintf('INSERT INTO online (uid,activity) VALUES (%d,now())', $_SESSION['uid']);
106       $sth = db_query($query);
107     }
108
109     if ($_SESSION["lastupdate"] < time() - 60) {
110       session_update();
111       $_SESSION["lastupdate"] = time();
112     }
113   }
114 }
115
116 ?>