X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;ds=sidebyside;f=application%2FSessionManager.php;h=63eeb8aa68ae32bd446f0ce91853c3e3cda130c0;hb=c7721487b2459e6760cae9d6292b7d39c306d3d6;hp=7bfd22205d3038604e406d9cf6d2aae89aff1041;hpb=1b28c66cc77b59f716aa47e6207142a7f86c2c2d;p=github%2Fshaarli%2FShaarli.git diff --git a/application/SessionManager.php b/application/SessionManager.php index 7bfd2220..63eeb8aa 100644 --- a/application/SessionManager.php +++ b/application/SessionManager.php @@ -1,21 +1,23 @@ session['uid'] = sha1(uniqid('', true) . '_' . mt_rand()); - $this->session['ip'] = client_ip_id($server); + $this->session['ip'] = $clientIpId; $this->session['username'] = $this->conf->get('credentials.login'); $this->session['expires_on'] = time() + self::$INACTIVITY_TIMEOUT; } + /** + * Extend session validity + */ + public function extendSession() + { + if (! empty($this->session['longlastingsession'])) { + // "Stay signed in" is enabled + $this->session['expires_on'] = time() + $this->session['longlastingsession']; + return; + } + $this->session['expires_on'] = time() + self::$INACTIVITY_TIMEOUT; + } + /** * Logout a user by unsetting all login information * @@ -124,4 +139,41 @@ class SessionManager } setcookie(self::$LOGGED_IN_COOKIE, 'false', 0, $webPath); } + + /** + * Check whether the session has expired + * + * @param string $clientIpId Client IP address identifier + * + * @return bool true if the session has expired, false otherwise + */ + public function hasSessionExpired() + { + if (empty($this->session['uid'])) { + return true; + } + if (time() >= $this->session['expires_on']) { + return true; + } + return false; + } + + /** + * Check whether the client IP address has changed + * + * @param string $clientIpId Client IP address identifier + * + * @return bool true if the IP has changed, false if it has not, or + * if session protection has been disabled + */ + public function hasClientIpChanged($clientIpId) + { + if ($this->conf->get('security.session_protection_disabled') === true) { + return false; + } + if ($this->session['ip'] == $clientIpId) { + return false; + } + return true; + } }