Метод set_signed_cookie
Метод set_signed_cookie применяется к объекту HttpResponse
и позволяет установить подписанную cookie, которая будет отправлена
клиенту. Подпись гарантирует, что данные не были изменены на стороне
клиента, так как сервер проверяет подпись при получении cookie обратно.
Метод принимает обязательные параметры: ключ (имя cookie), значение
и необязательные параметры для настройки срока действия и безопасности.
Подписанные cookie особенно полезны для хранения чувствительных данных,
которые должны быть защищены от подделки.
Синтаксис
response.set_signed_cookie(key, value, salt='', max_age=None, expires=None, path='/', domain=None, secure=False, httponly=False, samesite=None)
Параметры
Метод принимает следующие параметры:
-
key- имя cookie (строка) -
value- значение cookie (любой тип, поддерживающий сериализацию) -
salt- строка для дополнительной защиты подписи (по умолчанию пустая) -
max_age- время жизни cookie в секундах (по умолчанию None) -
expires- дата истечения срока действия (объект datetime) -
path- путь, для которого действительна cookie (по умолчанию '/') -
domain- домен, для которого действительна cookie -
secure- отправлять только по HTTPS (по умолчанию False) -
httponly- запретить доступ через JavaScript (по умолчанию False) -
samesite- режим SameSite ('Strict', 'Lax' или 'None')
Пример . С установкой простой подписанной cookie
Давайте установим подписанную cookie с именем пользователя в представлении:
from django.http import HttpResponse
def set_username_cookie(request):
response = HttpResponse("Cookie установлена")
response.set_signed_cookie('username', 'john_doe')
return response
После этого клиент получит cookie, подписанную сервером. При следующем
запросе сервер сможет проверить подпись с помощью метода
get_signed_cookie.
Пример . С защитой от подделки
Используем параметр salt для дополнительной защиты подписи:
from django.http import HttpResponse
def set_protected_cookie(request):
response = HttpResponse("Защищенная cookie")
response.set_signed_cookie(
'user_id',
12345,
salt='secret_salt_for_user_id'
)
return response
Пример . С ограничением срока действия
Установим cookie, которая будет действовать только 30 секунд:
from django.http import HttpResponse
def set_temporary_cookie(request):
response = HttpResponse("Временная cookie")
response.set_signed_cookie(
'temp_data',
'value_for_30_seconds',
max_age=30
)
return response
Результат выполнения кода:
"Cookie установлена с сроком действия 30 секунд"
Пример . С настройкой безопасности
Установим защищенную cookie с флагами безопасности:
from django.http import HttpResponse
def set_secure_cookie(request):
response = HttpResponse("Безопасная cookie")
response.set_signed_cookie(
'session_id',
'abc123xyz',
secure=True,
httponly=True,
samesite='Strict'
)
return response
Пример . С использованием datetime для expires
Установим cookie с явной датой истечения:
from django.http import HttpResponse
from datetime import datetime, timedelta
def set_expiring_cookie(request):
response = HttpResponse("Cookie с датой истечения")
expiry_date = datetime.now() + timedelta(days=1)
response.set_signed_cookie(
'expiring_cookie',
'will_expire_tomorrow',
expires=expiry_date
)
return response
Смотрите также
-
метод
set_cookie,
который устанавливает обычную cookie без подписи -
метод
delete_cookie,
который удаляет cookie на клиенте -
атрибут
COOKIES,
который содержит все полученные cookie -
класс
HttpResponse,
который представляет HTTP-ответ