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