summaryrefslogtreecommitdiff
path: root/include/sessions.php
diff options
context:
space:
mode:
Diffstat (limited to 'include/sessions.php')
-rw-r--r--include/sessions.php72
1 files changed, 72 insertions, 0 deletions
diff --git a/include/sessions.php b/include/sessions.php
index 8fbab1d..556edb9 100644
--- a/include/sessions.php
+++ b/include/sessions.php
@@ -59,6 +59,78 @@
register_shutdown_function('session_write_close');
+ if (Config::get(Config::DB_TYPE) == 'pgsql') {
+
+ function epube_open(string $savePath, string $sessionName): bool {
+ return true;
+ }
+
+ function epube_read(string $id): string {
+ global $session_expire;
+
+ $sth = \Db::pdo()->prepare("SELECT data FROM epube_sessions WHERE id=?");
+ $sth->execute([$id]);
+
+ if ($row = $sth->fetch()) {
+ return base64_decode($row["data"]);
+
+ } else {
+ $expire = time() + $session_expire;
+
+ $sth = \Db::pdo()->prepare("INSERT INTO epube_sessions (id, data, expire)
+ VALUES (?, '', ?)");
+ $sth->execute([$id, $expire]);
+
+ return "";
+
+ }
+
+ }
+
+ function epube_write(string $id, string $data): bool {
+ global $session_expire;
+
+ $data = base64_encode($data);
+ $expire = time() + $session_expire;
+
+ $sth = \Db::pdo()->prepare("SELECT id FROM epube_sessions WHERE id=?");
+ $sth->execute([$id]);
+
+ if ($sth->fetch()) {
+ $sth = \Db::pdo()->prepare("UPDATE epube_sessions SET data=?, expire=? WHERE id=?");
+ $sth->execute([$data, $expire, $id]);
+ } else {
+ $sth = \Db::pdo()->prepare("INSERT INTO epube_sessions (id, data, expire)
+ VALUES (?, ?, ?)");
+ $sth->execute([$id, $data, $expire]);
+ }
+
+ return true;
+ }
+
+ function epube_close(): bool {
+ return true;
+ }
+
+ function epube_destroy(string $id): bool {
+ $sth = \Db::pdo()->prepare("DELETE FROM epube_sessions WHERE id = ?");
+ $sth->execute([$id]);
+
+ return true;
+ }
+
+ function epube_gc(int $lifetime): bool {
+ \Db::pdo()->query("DELETE FROM epube_sessions WHERE expire < " . time());
+
+ return true;
+ }
+
+ session_set_save_handler('epube_open',
+ 'epube_close', 'epube_read',
+ 'epube_write', 'epube_destroy',
+ 'epube_gc'); // @phpstan-ignore-line
+ }
+
if (isset($_COOKIE[session_name()])) {
if (session_status() != PHP_SESSION_ACTIVE)
session_start();