Я не знаю точно, как Github это делает.Но одна возможность - использовать обработчик событий visibilitychange
.Это сработает при переключении вкладок.Обработчик событий может проверить файлы cookie для текущего сайта и определить, вошел ли кто-то в другую вкладку.
https://developer.mozilla.org/en-US/docs/Web/Events/visibilitychange
Обычно вкладки не имеют состояния.Но две вкладки имеют одинаковое происхождение (доменное имя), они совместно используют куки.В django вы обычно выводите токен csrf в html dom с тегом шаблона {% csrf_token %}
, что означает, что если токен csrf текущей вкладки был признан недействительным (что происходит при входе в систему), вы должны обновить страницу, чтобы получить свежий токен.
Один из способов прикрепить такой прослушиватель событий заключается в следующем:
// check cookie for `logged_in` substring (this only works for insecure cookies. Not http-only)
const isLoggedIn = () => document.cookie.includes('logged_in')
// check cookie for changes when you open this tab
const signInSpy = () => {
document.visibilitystate === 'visible' &&
isLoggedIn() &&
alert('refresh, please')
}
// only attach event handler when not signed in.
document.onvisibilitychange = isLoggedIn() ? null : signInSpy
Этот пример работает, только если logged_in
не является файлом cookie только для http.Другие варианты взаимодействия между вкладками см. В следующем вопросе: Связь между вкладками или окнами