summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Göhler <somebody.here@gmx.de>2012-10-14 20:47:31 +0200
committerMichael Göhler <somebody.here@gmx.de>2012-10-14 22:36:26 +0200
commitae1f33db5453052a1b267b00b0c6fd7b6b70ff82 (patch)
treeda80fae767d146af1b32ebc8b9caebcc81d41ea1
parentb92fd984aa7f9281144b410ff703ca1796c10d41 (diff)
downloadnextcloud-server-ae1f33db5453052a1b267b00b0c6fd7b6b70ff82.tar.gz
nextcloud-server-ae1f33db5453052a1b267b00b0c6fd7b6b70ff82.zip
implement fixed php session timeout and session id regeneration
-rw-r--r--lib/base.php22
1 files changed, 22 insertions, 0 deletions
diff --git a/lib/base.php b/lib/base.php
index ebeec22088a..0ba028a68d2 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -264,8 +264,30 @@ class OC{
}
public static function initSession() {
+ // prevents javascript from accessing php session cookies
ini_set('session.cookie_httponly', '1;');
+
+ // (re)-initialize session
session_start();
+
+ // regenerate session id periodically to avoid session fixation
+ if (!isset($_SESSION['SID_CREATED'])) {
+ $_SESSION['SID_CREATED'] = time();
+ } else if (time() - $_SESSION['SID_CREATED'] > 900) {
+ session_regenerate_id(true);
+ $_SESSION['SID_CREATED'] = time();
+ }
+
+ // session timeout
+ if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 3600)) {
+ if (isset($_COOKIE[session_name()])) {
+ setcookie(session_name(), '', time() - 42000, '/');
+ }
+ session_unset();
+ session_destroy();
+ session_start();
+ }
+ $_SESSION['LAST_ACTIVITY'] = time();
}
public static function init() {