Ты прав. IReadOnlySessionState
интерфейс просто дает вам возможность использовать объект Context.Session.
Но если вы реализуете интерфейс IRequiresSessionState
, ваш обработчик устанавливает эксклюзивную блокировку для текущего сеанса, поэтому все другие запросы (которые хотят использовать объект Session) в контексте того же сеанса будут ждать, пока ваш обработчик не завершит работу.
IReadOnlySessionState
не очень хорошее имя, потому что на самом деле вы можете изменить SessionState в таких обработчиках, и вы не получите исключение. Вы просто берете на себя ответственность за сопутствующие проблемы.