jenkins-bot has submitted this change and it was merged.
Change subject: Moved ObjectCacheSessionHandler renewal logic to
wfSetupSession()
......................................................................
Moved ObjectCacheSessionHandler renewal logic to wfSetupSession()
* This should trigger more reliably than the shutdown function
callback, which is really only there for sanity to make sure
session close/write happens.
Change-Id: I9a1aa76de121ba8de33b3fa850bd223929fae404
---
M includes/GlobalFunctions.php
M includes/objectcache/ObjectCacheSessionHandler.php
2 files changed, 30 insertions(+), 11 deletions(-)
Approvals:
Ori.livneh: Looks good to me, approved
jenkins-bot: Verified
diff --git a/includes/GlobalFunctions.php b/includes/GlobalFunctions.php
index f98a0cf..2b9bc25 100644
--- a/includes/GlobalFunctions.php
+++ b/includes/GlobalFunctions.php
@@ -3461,8 +3461,9 @@
* @param bool $sessionId
*/
function wfSetupSession( $sessionId = false ) {
- global $wgSessionsInMemcached, $wgSessionsInObjectCache, $wgCookiePath,
$wgCookieDomain,
- $wgCookieSecure, $wgCookieHttpOnly, $wgSessionHandler;
+ global $wgSessionsInMemcached, $wgSessionsInObjectCache,
$wgSessionHandler;
+ global $wgCookiePath, $wgCookieDomain, $wgCookieSecure,
$wgCookieHttpOnly;
+
if ( $wgSessionsInObjectCache || $wgSessionsInMemcached ) {
ObjectCacheSessionHandler::install();
} elseif ( $wgSessionHandler && $wgSessionHandler != ini_get(
'session.save_handler' ) ) {
@@ -3470,6 +3471,7 @@
# hasn't already been set to the desired value (that causes
errors)
ini_set( 'session.save_handler', $wgSessionHandler );
}
+
session_set_cookie_params(
0, $wgCookiePath, $wgCookieDomain, $wgCookieSecure,
$wgCookieHttpOnly );
session_cache_limiter( 'private, must-revalidate' );
@@ -3478,9 +3480,14 @@
} else {
wfFixSessionID();
}
+
MediaWiki\suppressWarnings();
session_start();
MediaWiki\restoreWarnings();
+
+ if ( $wgSessionsInObjectCache || $wgSessionsInMemcached ) {
+ ObjectCacheSessionHandler::renewCurrentSession();
+ }
}
/**
diff --git a/includes/objectcache/ObjectCacheSessionHandler.php
b/includes/objectcache/ObjectCacheSessionHandler.php
index 1430dd8..8a7b298 100644
--- a/includes/objectcache/ObjectCacheSessionHandler.php
+++ b/includes/objectcache/ObjectCacheSessionHandler.php
@@ -21,6 +21,8 @@
* @ingroup Cache
*/
+use MediaWiki\Logger\LoggerFactory;
+
/**
* Session storage in object cache.
* Used if $wgSessionsInObjectCache is true.
@@ -28,9 +30,6 @@
* @ingroup Cache
*/
class ObjectCacheSessionHandler {
-
- const TTL_REFRESH_WINDOW = 600; // refresh if expiring in 10 minutes
-
/**
* Install a session handler for the current web request
*/
@@ -145,20 +144,33 @@
* See the comment inside ObjectCacheSessionHandler::install for
rationale.
*/
static function handleShutdown() {
+ session_write_close();
+ }
+
+ /**
+ * Pre-emptive session renewal function
+ */
+ static function renewCurrentSession() {
global $wgObjectCacheSessionExpiry;
+
+ // Once a session is at half TTL, renew it
+ $window = $wgObjectCacheSessionExpiry / 2;
+ $logger = LoggerFactory::getInstance( 'SessionHandler' );
$now = microtime( true );
// Session are only written in object stores when $_SESSION
changes,
// which also renews the TTL ($wgObjectCacheSessionExpiry). If
a user
// is active but not causing session data changes, it may
suddenly
- // as they view a form, blocking the first submission.
+ // expire as they view a form, blocking the first submission.
// Make a dummy change every so often to avoid this.
- if ( !isset( $_SESSION['wsExpiresUnix'] )
- || ( $now + self::TTL_REFRESH_WINDOW ) > isset(
$_SESSION['wsExpiresUnix'] )
- ) {
+ if ( !isset( $_SESSION['wsExpiresUnix'] ) ) {
$_SESSION['wsExpiresUnix'] = $now +
$wgObjectCacheSessionExpiry;
- }
- session_write_close();
+ $logger->info( "Set expiry for session " .
session_id(), array() );
+ } elseif ( ( $now + $window ) > $_SESSION['wsExpiresUnix'] ) {
+ $_SESSION['wsExpiresUnix'] = $now +
$wgObjectCacheSessionExpiry;
+
+ $logger->info( "Renewed session " . session_id(),
array() );
+ }
}
}
--
To view, visit https://gerrit.wikimedia.org/r/228975
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I9a1aa76de121ba8de33b3fa850bd223929fae404
Gerrit-PatchSet: 4
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Aaron Schulz <[email protected]>
Gerrit-Reviewer: Ori.livneh <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits