Сессия делает именно то, что говорит на банке - существует на время сеанса клиента. Сеанс просмотра по определению (например, один) заканчивается при закрытии браузера.
Сеансы на основе файлов cookie работают путем установки файла cookie, срок жизни которого определен в PHP как 0
- это означает, что браузер должен уничтожить файл cookie, когда браузер закрыт. После того как cookie был уничтожен, идентификатор сеанса не отправляется ни в каких последующих запросах к серверу, поэтому данные сеанса не будут доступны в вашем сценарии PHP.
Однако данные сеанса не уничтожаются на стороне сервера в тот момент, когда пользователь закрывает браузер, как вы предложили, - это невозможно, поскольку клиент не уведомляет сервер о том, что он был закрыт. Вместо этого данные сеанса на стороне сервера имеют TTL (время жизни), значение по умолчанию которого составляет 15 минут. По истечении этого срока данные могут быть в любое время удалены сессионным сборщиком мусора. Теоретически это может занять некоторое значительное время, но на практике на занятом сервере данные будут удалены в течение пары минут после истечения срока действия TTL.
Однако PHP не может сделать данные сеанса доступными, если у него нет идентификатора сеанса, и он не будет иметь идентификатора сеанса, если cookie был уничтожен, что, как я говорю, должно произойти, когда пользователь закрывает свой браузер.
Итак, краткий ответ на вопрос How can I restore a PHP session?
: Вы не можете