Mit session_regenerate_id() stolpert man schnell in Race Conditions.
Der Browser sendet u.U. ettliche Requests quasi gleichzeitig ab.
Es gibt keine Chance das Problem zu umgehen.
Testcode:
PHP-Code:
<?php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
session_start();
//session_regenerate_id(TRUE);
sleep(2);
if(isset($_GET['frame']))
{
echo 'Zeit: '. (time() - $_SESSION['richtzeit']) .'<br>';
exit;
}
$_SESSION['richtzeit'] = time();
?>
<frameset rows="20%,20%,20%,20%,20%">
<frame src="?frame=<?php echo mt_rand()?>" name="test1">
<frame src="?frame=<?php echo mt_rand()?>" name="test2">
<frame src="?frame=<?php echo mt_rand()?>" name="test3">
<frame src="?frame=<?php echo mt_rand()?>" name="test4">
<frame src="?frame=<?php echo mt_rand()?>" name="test5">
</frameset>
Die Zeiten sollten im 2 Sekunden Takt in die Frames tröpfeln.
Mit session_regenerate_id(TRUE); hagelt es Meldungen, weil das gesendetet Cookie schon veraltet ist und das TRUE die Sessiondatei schon längst entsorgt hat. Auch das weglassen des TRUE bringt nicht viel, weil dann mit veralteten Sessiondaten gearbeitet wird.
Zitat:
ob das nun sinnvoll ist oder eine einmaliges regenerate nach einem user-login ausreichend wäre, sei bitte kein diskussionsgegenstand.
|
Doch doch!
Wenn du die "gleichzeitigen" Requests nicht verhindern kannst, und das kannst du nicht, wirst du dir darum schon Gedanken machen müssen.