dépôts
/
lhc
/
web
/
wiklou.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
SessionManager: Use existing backend for the ID if one is loaded
[lhc/web/wiklou.git]
/
includes
/
session
/
SessionManager.php
diff --git
a/includes/session/SessionManager.php
b/includes/session/SessionManager.php
index
81f8243
..
da7bc57
100644
(file)
--- a/
includes/session/SessionManager.php
+++ b/
includes/session/SessionManager.php
@@
-197,13
+197,17
@@
final class SessionManager implements SessionManagerInterface {
}
$session = null;
}
$session = null;
+ $info = new SessionInfo( SessionInfo::MIN_PRIORITY, [ 'id' => $id, 'idIsSafe' => true ] );
- // Test this here to provide a better log message for the common case
- // of "no such ID"
+ // If we already have the backend loaded, use it directly
+ if ( isset( $this->allSessionBackends[$id] ) ) {
+ return $this->getSessionFromInfo( $info, $request );
+ }
+
+ // Test if the session is in storage, and if so try to load it.
$key = wfMemcKey( 'MWSession', $id );
if ( is_array( $this->store->get( $key ) ) ) {
$key = wfMemcKey( 'MWSession', $id );
if ( is_array( $this->store->get( $key ) ) ) {
- $create = false;
- $info = new SessionInfo( SessionInfo::MIN_PRIORITY, [ 'id' => $id, 'idIsSafe' => true ] );
+ $create = false; // If loading fails, don't bother creating because it probably will fail too.
if ( $this->loadSessionInfoFromStore( $info, $request ) ) {
$session = $this->getSessionFromInfo( $info, $request );
}
if ( $this->loadSessionInfoFromStore( $info, $request ) ) {
$session = $this->getSessionFromInfo( $info, $request );
}
@@
-287,7
+291,7
@@
final class SessionManager implements SessionManagerInterface {
// Make sure there's exactly one
if ( count( $infos ) > 1 ) {
throw new \UnexpectedValueException(
// Make sure there's exactly one
if ( count( $infos ) > 1 ) {
throw new \UnexpectedValueException(
- 'Multiple empty sessions tied for top priority: ' .
join
( ', ', $infos )
+ 'Multiple empty sessions tied for top priority: ' .
implode
( ', ', $infos )
);
} elseif ( count( $infos ) < 1 ) {
throw new \UnexpectedValueException( 'No provider could provide an empty session!' );
);
} elseif ( count( $infos ) < 1 ) {
throw new \UnexpectedValueException( 'No provider could provide an empty session!' );
@@
-537,7
+541,7
@@
final class SessionManager implements SessionManagerInterface {
\DeferredUpdates::addUpdate( new \SiteStatsUpdate( 0, 0, 0, 0, 1 ) );
# Watch user's userpage and talk page
\DeferredUpdates::addUpdate( new \SiteStatsUpdate( 0, 0, 0, 0, 1 ) );
# Watch user's userpage and talk page
- $user->addWatch( $user->getUserPage(),
\WatchedItem
::IGNORE_USER_RIGHTS );
+ $user->addWatch( $user->getUserPage(),
User
::IGNORE_USER_RIGHTS );
return true;
}
return true;
}
@@
-677,7
+681,7
@@
final class SessionManager implements SessionManagerInterface {
if ( count( $retInfos ) > 1 ) {
$ex = new \OverflowException(
if ( count( $retInfos ) > 1 ) {
$ex = new \OverflowException(
- 'Multiple sessions for this request tied for top priority: ' .
join
( ', ', $retInfos )
+ 'Multiple sessions for this request tied for top priority: ' .
implode
( ', ', $retInfos )
);
$ex->sessionInfos = $retInfos;
throw $ex;
);
$ex->sessionInfos = $retInfos;
throw $ex;
@@
-974,7
+978,9
@@
final class SessionManager implements SessionManagerInterface {
if ( defined( 'MW_NO_SESSION' ) ) {
if ( MW_NO_SESSION === 'warn' ) {
// Undocumented safety case for converting existing entry points
if ( defined( 'MW_NO_SESSION' ) ) {
if ( MW_NO_SESSION === 'warn' ) {
// Undocumented safety case for converting existing entry points
- $this->logger->error( 'Sessions are supposed to be disabled for this entry point' );
+ $this->logger->error( 'Sessions are supposed to be disabled for this entry point', [
+ 'exception' => new \BadMethodCallException( 'Sessions are disabled for this entry point' ),
+ ] );
} else {
throw new \BadMethodCallException( 'Sessions are disabled for this entry point' );
}
} else {
throw new \BadMethodCallException( 'Sessions are disabled for this entry point' );
}