]> git.wh0rd.org Git - tt-rss.git/blob - include/sessions.php
Merge branch 'af-readability' into 'master'
[tt-rss.git] / include / sessions.php
1 <?php
2         // Original from http://www.daniweb.com/code/snippet43.html
3
4         require_once "config.php";
5         require_once "classes/db.php";
6         require_once "autoload.php";
7         require_once "errorhandler.php";
8         require_once "lib/accept-to-gettext.php";
9         require_once "lib/gettext/gettext.inc";
10         require_once "version.php";
11
12         $session_expire = max(SESSION_COOKIE_LIFETIME, 86400);
13         $session_name = (!defined('TTRSS_SESSION_NAME')) ? "ttrss_sid" : TTRSS_SESSION_NAME;
14
15         if (@$_SERVER['HTTPS'] == "on") {
16                 $session_name .= "_ssl";
17                 ini_set("session.cookie_secure", true);
18         }
19
20         ini_set("session.gc_probability", 75);
21         ini_set("session.name", $session_name);
22         ini_set("session.use_only_cookies", true);
23         ini_set("session.gc_maxlifetime", $session_expire);
24         ini_set("session.cookie_lifetime", min(0, SESSION_COOKIE_LIFETIME));
25
26         function session_get_schema_version($nocache = false) {
27                 global $schema_version;
28
29                 if (!$schema_version) {
30                         $result = Db::get()->query("SELECT schema_version FROM ttrss_version");
31                         $version = Db::get()->fetch_result($result, 0, "schema_version");
32                         $schema_version = $version;
33                         return $version;
34                 } else {
35                         return $schema_version;
36                 }
37         }
38
39         function validate_session() {
40                 if (SINGLE_USER_MODE) return true;
41
42                 if (isset($_SESSION["ref_schema_version"]) && $_SESSION["ref_schema_version"] != session_get_schema_version(true)) {
43                         $_SESSION["login_error_msg"] =
44                                 __("Session failed to validate (schema version changed)");
45                         return false;
46                 }
47
48                 if ($_SESSION["uid"]) {
49                         $result = Db::get()->query(
50                                 "SELECT pwd_hash FROM ttrss_users WHERE id = '".$_SESSION["uid"]."'");
51
52                         // user not found
53                         if (Db::get()->num_rows($result) == 0) {
54
55                                 $_SESSION["login_error_msg"] =
56                                         __("Session failed to validate (user not found)");
57
58                                 return false;
59                         } else {
60                                 $pwd_hash = Db::get()->fetch_result($result, 0, "pwd_hash");
61
62                                 if ($pwd_hash != $_SESSION["pwd_hash"]) {
63
64                                         $_SESSION["login_error_msg"] =
65                                                 __("Session failed to validate (password changed)");
66
67                                         return false;
68                                 }
69                         }
70                 }
71
72                 return true;
73         }
74
75
76         function ttrss_open ($s, $n) {
77                 return true;
78         }
79
80         function ttrss_read ($id){
81                 global $session_expire;
82
83                 $res = Db::get()->query("SELECT data FROM ttrss_sessions WHERE id='$id'");
84
85                 if (Db::get()->num_rows($res) != 1) {
86
87                         $expire = time() + $session_expire;
88
89                         Db::get()->query("INSERT INTO ttrss_sessions (id, data, expire)
90                                         VALUES ('$id', '', '$expire')");
91
92                         return "";
93                 } else {
94                         return base64_decode(Db::get()->fetch_result($res, 0, "data"));
95                 }
96
97         }
98
99         function ttrss_write ($id, $data) {
100                 global $session_expire;
101
102                 $data = base64_encode($data);
103                 $expire = time() + $session_expire;
104
105                 Db::get()->query("UPDATE ttrss_sessions SET data='$data', expire='$expire' WHERE id='$id'");
106
107                 return true;
108         }
109
110         function ttrss_close () {
111                 return true;
112         }
113
114         function ttrss_destroy($id) {
115                 Db::get()->query("DELETE FROM ttrss_sessions WHERE id = '$id'");
116
117                 return true;
118         }
119
120         function ttrss_gc ($expire) {
121                 Db::get()->query("DELETE FROM ttrss_sessions WHERE expire < " . time());
122         }
123
124         if (!SINGLE_USER_MODE /* && DB_TYPE == "pgsql" */) {
125                 session_set_save_handler("ttrss_open",
126                         "ttrss_close", "ttrss_read", "ttrss_write",
127                         "ttrss_destroy", "ttrss_gc");
128                 register_shutdown_function('session_write_close');
129         }
130
131         if (!defined('NO_SESSION_AUTOSTART')) {
132                 if (isset($_COOKIE[session_name()])) {
133                         @session_start();
134                 }
135         }
136 ?>