summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2021-06-25 12:23:01 +0300
committerAndrew Dolgov <[email protected]>2021-06-25 12:23:01 +0300
commit7ef52ac5e398efbbb865083bcd0cdcd404a3889d (patch)
tree5344ddb9d2c15320fcb42bbaf29e1c6c592c5143
parent2887f9109521c9790579f0c5938c25bf95bcb132 (diff)
prolong PHP session cookie automatically to stop hard logouts after SESSION_LIFETIME expires
-rw-r--r--classes/config.php2
-rw-r--r--include/sessions.php20
2 files changed, 19 insertions, 3 deletions
diff --git a/classes/config.php b/classes/config.php
index 95b0ccc..e62ea34 100644
--- a/classes/config.php
+++ b/classes/config.php
@@ -14,6 +14,7 @@ class Config {
const BOOKS_DIR = "BOOKS_DIR";
const DICT_SERVER = "DICT_SERVER";
const SESSION_LIFETIME = "SESSION_LIFETIME";
+ const SESSION_NAME = "SESSION_NAME";
private const _DEFAULTS = [
Config::DB_TYPE => [ "sqlite", Config::T_STRING ],
@@ -22,6 +23,7 @@ class Config {
Config::BOOKS_DIR => [ "", Config::T_STRING ],
Config::DICT_SERVER => [ "", Config::T_STRING ],
Config::SESSION_LIFETIME => [ 86400*30, Config::T_INT ],
+ Config::SESSION_NAME => [ "epube_sid", Config::T_STRING ],
];
private static $instance;
diff --git a/include/sessions.php b/include/sessions.php
index b4d901b..aa0cd94 100644
--- a/include/sessions.php
+++ b/include/sessions.php
@@ -1,17 +1,31 @@
<?php
require_once "common.php";
+ $session_name = Config::get(Config::SESSION_NAME);
+ $session_expire = Config::get(Config::SESSION_LIFETIME);
+
if (Config::is_server_https())
ini_set("session.cookie_secure", "true");
ini_set("session.name", "epube_sid");
ini_set("session.use_only_cookies", "true");
- ini_set("session.gc_maxlifetime", Config::get(Config::SESSION_LIFETIME));
- ini_set("session.cookie_lifetime", Config::get(Config::SESSION_LIFETIME));
- session_set_cookie_params(Config::get(Config::SESSION_LIFETIME));
+ ini_set("session.gc_maxlifetime", $session_expire);
+ ini_set("session.cookie_lifetime", "0");
+
+ session_set_cookie_params($session_expire);
session_save_path(dirname(__DIR__) . "/sessions");
+ // prolong PHP session cookie
+ if (isset($_COOKIE[$session_name]))
+ setcookie($session_name,
+ $_COOKIE[$session_name],
+ time() + $session_expire,
+ ini_get("session.cookie_path"),
+ ini_get("session.cookie_domain"),
+ ini_get("session.cookie_secure"),
+ ini_get("session.cookie_httponly"));
+
function validate_session() {
if (!empty($_SESSION["owner"])) {