http icon indicating copy to clipboard operation
http copied to clipboard

Incorrect session expiration time while winter/daylight saving time changes

Open forrest79 opened this issue 8 months ago • 5 comments

Version: 3.3.2

Bug Description

In DI we had set:

session:
    expiration: '+75 minutes' 

During last winter to daylight saving time change, we encounter this error in log PHP User Notice: The expiration time is greater than the session expiration 900 seconds in .../vendor/nette/http/src/Http/SessionSection.php:197.

This error appears at 01:45 (30.3.2025) and the last was at 01:59. Our setting is 75 minutes = 4500 second. Minus one hour, it is 900 seconds (from the error message). The error started 75 minutes before 3:00 and ended at 2:00 when the time was changed to 3:00.

I think the problem is in the vendor/nette/http/src/Http/Session.php -> setExpiration method.

$expire = Nette\Utils\DateTime::from($expire)->format('U') - time()

DateTime is handling correctly time change, but time() doesn't. For now, we try to fix this by setting expiration: '4500' that is in Nette\Utils\DateTime::from() used as numeric and is not converted via PHP DateTime.

Steps To Reproduce

Not sure how to simply simulate this without changing computer date/time.

Expected Behavior

I'm expecting correct expiration time during winter/daylight saving time change.

Possible Solution

Not sure.

forrest79 avatar Apr 01 '25 08:04 forrest79

I can remove the check completely.

dg avatar Apr 01 '25 17:04 dg

Ok, but it doesn't solve, that expiration should be all the time 4500 seconds, but for 15 minutes it was only 900 seconds, right?

forrest79 avatar Apr 01 '25 19:04 forrest79

Another option would be to ignore the timezone configuration in PHP and compute the expiration always in UTC. Sth like

$nowUtc = new DateTimeImmutable('now', new DateTimeZone('UTC'));
$expireInSeconds = $nowUtc->modify($expire)->getTimestamp() - $nowUtc->getTimestamp();

JanTvrdik avatar Apr 02 '25 08:04 JanTvrdik

@JanTvrdik I don't think that timezone would have any influence in your example

Edit: tývolé, vůbec jsem netušil, že je v těch relativních časech taková prasárnička, žiju celý život v iluzi 🙈

dg avatar Apr 03 '25 22:04 dg

I think I'll fix Nette\Utils\DateTime to handle relative times more sanely.

dg avatar Apr 04 '25 05:04 dg