Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the difference between SessionHandlerInterface::write and SessionUpdateTimestampHandlerInterface::updateTimestamp?

Tags:

php

session

The PHP session logic has two distinct SessionHandlerInterface and SessionUpdateTimestampHandlerInterface interfaces while the SessionUpdateTimestampHandlerInterface interface is still not fully described in the docs.

The SessionHandlerInterface::write and SessionUpdateTimestampHandlerInterface::updateTimestamp functions feels quite similar. Both have the same arguments (session id and session data) and return a bool.

What is the difference between these two functions?

How should differ the code implementing these two functions?

How is the code supposed to update a timestamp if there is no timestamp provided to the updateTimestamp function?

Edit: I have created a PHP bug regarding the missing docs.

like image 615
alik Avatar asked Dec 06 '18 08:12

alik


1 Answers

These two methods are quite similar but are called in different situations.

1)

SessionHandler without SessionUpdateTimestampHandlerInterface:

A logged in user requests a page and its session with all data gets loaded. During the request the dataset is not modified and once the session closes all data will be written into the storage again (calls SessionHandlerInterface::write). So you will write the same data over and over again.

SessionHandler with SessionUpdateTimestampHandlerInterface:

Same scenario but now if the dataset is not modified it will call SessionUpdateTimestampHandlerInterface::updateTimestamp. The advantage is now you know you don't need to write the dataset again and you just can update the lifetime of the existing dataset. This can be a huge performance improvement.

2)

Thats depending on where you are storing the sessions/data. SessionHandlerInterface::write should really write the data and SessionUpdateTimestampHandlerInterface::updateTimestamp if possible should just update the lifetime of an existing item. Symfony has some good examples.

3)

The timestamp should be the same as the max lifetime to "reset" it on every request as normal write would do.

The documation as mentioned is not good at the moment. Some good information can be found in this RFC.

like image 148
Stephan Muggli Avatar answered Sep 28 '22 12:09

Stephan Muggli