После прочтения поста в блоге, на который вы ссылаетесь и читаете код классов Session
и NativeSessionStorage
, я попытался бы подражать поведению, упомянутому в посте блога, так:
$session = $this->get('session');
// Change the session attributes
$session->save();
session_write_close();
// Do database calls and other stuff.
Я не тестировал его, но он должен работать, как и ожидалось. Другое решение вашей проблемы - использовать хранилище сеансов, отличное от NativeSessionStorage
, которое используется по умолчанию. Например, вы можете использовать хранилище базы данных, используя объект PdoSessionStorage
. Это может помешать PHP использовать блокировку. См. Эту запись поваренной книги для получения дополнительной информации о том, как использовать хранилище базы данных для сеансов.
Но нет никакой гарантии, что система базы данных не будет составлять несколько запросов, если они обращаются к одной и той же строке, но это должно быть намного быстрее, чем с NativeSessionStorage
.
С уважением,
Matt