Сервер Django установит cookie для идентификации клиента, связанного с сеансом:
request.session[key] = mapped_token_to_user_id
См. Документацию Django :
Каркас сеанса позволяет вам хранить и извлекать произвольные данные для каждого посетителя сайта. Он хранит данные на стороне сервера и объявляет об отправке и получении файлов cookie. Файлы cookie содержат идентификатор сеанса [...]
Затем вы перенаправляете браузер, подключенный к серверу A, на URL-адрес, возвращенный с сервера B, но вы удаляете информацию о файлах cookie. Клиент, подключающийся к Серверу A, не имеет cookie, поэтому он не передает его на Сервер B.
и , если Сервер B не находится в том же домене, что и Сервер A , вы не можете передать этот файл cookie клиенту. Браузеры не будут отправлять файлы cookie, полученные с одного домена на другой; файлы cookie для stackoverflow.com не должны передаваться, скажем, google.com , это было бы очень большой проблемой безопасности, если бы они это сделали.
Таким образом, если сервер A и сервер B находятся в двух разных доменах (например, foo.bar.example
для сервера A и spam.ham.example
для сервера B), то у вас нет пути для передачи файла cookie клиенту при перенаправлении клиент-сервер B. В этом случае необходимо, чтобы сервер A напрямую подключался к новому URL-адресу сервера B, передавая файл cookie из ответа.
Если Сервер A и Сервер B совместно используют домен (foo.bar.example
и spam.bar.example
совместно используют .bar.example
в качестве имени домена), то вы можете установить cookie для этого общего доменного имени (с префиксом .
на имя), чтобы сообщить клиенту, что он может поделиться этим cookie со всеми серверами в одном доменном имени.
В любом случае вам нужно извлечь сессионный cookie; имя по умолчанию, используемое Джанго: sessionid
:
session_cookie = r.cookies['sessionid']
Если вы собираетесь подключиться к новому URL-адресу с сервера A, вам необходимо добавить этот файл cookie в исходящий запрос (requests.get(url, cookies={'sessionid': session_cookie}
).
Если вы собираетесь передать его клиенту при перенаправлении, установите его в ответе, прежде чем возвращать его:
response = redirect(r.url)
response.set_cookie('sessionid', session_cookie, domain='.bar.example')
return response