У меня сложная проблема. Я объясню ситуацию в деталях, чтобы вы, ребята, могли надеяться помочь мне.
- Я использую. NET Core 3.1
- Каждая страница веб-сайта, сразу после загрузки, устанавливает Веб-сокет SignalR на сервер.
- Каждый раз, когда пользователь нажимает на какую-либо ссылку, отправляется запрос ajax для получения нового содержимого.
- Существуют пошаговые формы, в которых хранятся данные сессия.
Все работает без нареканий, кроме одной вещи. Состояние сеанса будет повреждено, если пользователь перезагрузит страницу; и это из-за концентратора SignalR. Два дня я боролся за то, чтобы выяснить точный сценарий проблемы. Здесь идет речь:
- Пользователь впервые загружает сайт в своем браузере.
- Клиент немедленно подключается к хабу SignalR.
- Пользователь переходит к формам (полностью ajax) и заполняет некоторые данные. Данные сохраняются в сеансе (опять же, все срабатывает по ajax).
- Теперь, если пользователь обновляет всю страницу, это приводит к разрыву соединения SignalR. Это приведет к тому, что
SessionMiddleware
на концентраторе подтвердит свои данные сеанса, которые были загружены перед сохранением данных форм. Таким образом, действительное состояние сеанса переопределяется его старым состоянием!
Здесь фиксируется сеанс:
https://github.com/dotnet/aspnetcore/blob/2c4d604cebc6821a5ba8ee06667605b9e4f6e890/src/Middleware/Session/src/SessionMiddleware.cs#L117
Мне интересно, что может быть лучшим решением этой проблемы. Возможно, я мог бы как-то отключить фиксацию сеанса для конечной точки концентратора ('/ hub')?
Спасибо за ваше время.