Skip to content

Commit 37367ec

Browse files
fix(session): Log critical conditions where sessions might be lost
* Regenerating session when cookies can't be sent -> lost * Regenerating session ID and deleting old data -> possible loss Signed-off-by: Christoph Wurst <[email protected]>
1 parent d9cbe10 commit 37367ec

File tree

1 file changed

+16
-0
lines changed

1 file changed

+16
-0
lines changed

lib/private/Session/Internal.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@
3636
use OC\Authentication\Exceptions\InvalidTokenException;
3737
use OC\Authentication\Token\IProvider;
3838
use OCP\Session\Exceptions\SessionNotAvailableException;
39+
use function headers_sent;
40+
use function OCP\Log\logger;
3941

4042
/**
4143
* Class Internal
@@ -138,6 +140,14 @@ public function regenerateId(bool $deleteOldSession = true, bool $updateToken =
138140
}
139141
}
140142

143+
if (headers_sent()) {
144+
logger('core')->critical('Regenerating session ID but headers have been sent. This session will be lost.', [
145+
'deleteOldSession' => $deleteOldSession,
146+
]);
147+
} else if ($deleteOldSession) {
148+
logger('core')->warning('Calling session_regenerate_id with delete_old_session=true can lead to lost sessions');
149+
}
150+
141151
try {
142152
@session_regenerate_id($deleteOldSession);
143153
} catch (\Error $e) {
@@ -222,6 +232,12 @@ private function startSession(bool $silence = false, bool $readAndClose = true)
222232
if (\OC::hasSessionRelaxedExpiry()) {
223233
$sessionParams['read_and_close'] = $readAndClose;
224234
}
235+
if (headers_sent()) {
236+
logger('core')->critical('Starting session but headers have been sent. This session will be lost.', [
237+
'silence' => $silence,
238+
'readAndClos' => $readAndClose,
239+
]);
240+
}
225241
$this->invoke('session_start', [$sessionParams], $silence);
226242
}
227243
}

0 commit comments

Comments
 (0)