Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Cookies: хранение состояния на клиенте
Cookie — это маленькие файлы данных, которые браузер хранит на стороне клиента и автоматически отправляет серверу с каждым запросом. Это основной механизм для сохранения состояния в HTTP (протокол без состояния).
Как работают cookies
# На сервере (Flask пример):
from flask import Flask, request, make_response
app = Flask(__name__)
@app.route("/login", methods=["POST"])
def login():
user_id = authenticate(request.json)
response = make_response({"status": "ok"})
response.set_cookie(
"session_id",
value=f"sess_{user_id}",
max_age=3600,
secure=True,
httponly=True,
samesite="Strict"
)
return response
@app.route("/protected")
def protected():
session_id = request.cookies.get("session_id")
if validate_session(session_id):
return {"data": "private"}
return {"error": "unauthorized"}, 401
Жизненный цикл cookie
- Создание: Сервер отправляет заголовок Set-Cookie
- Сохранение: Браузер сохраняет файл на диск
- Отправка: При каждом запросе браузер отправляет Cookie заголовок
- Удаление: Когда max_age истечёт или expires достигнут
Основные атрибуты
response.set_cookie(
"user_id",
value="12345",
max_age=86400,
path="/api",
domain=".example.com",
secure=True,
httponly=True,
samesite="Strict"
)
Аутентификация (Session)
import secrets
from flask_session import Session
app.config["SESSION_TYPE"] = "filesystem"
Session(app)
@app.route("/login", methods=["POST"])
def login():
session["user_id"] = user_id
session["role"] = "admin"
return {"status": "ok"}
@app.route("/profile")
def profile():
user_id = session.get("user_id")
if not user_id:
return {"error": "not authenticated"}, 401
return get_user_profile(user_id)
Tracking и Analytics
response.set_cookie(
"tracking_id",
value=secrets.token_hex(16),
max_age=365*24*3600
)
Безопасность
Уязвимости:
- XSS: JS может украсть cookie — используй httponly=True
- CSRF: Запрос с другого сайта — используй samesite=Strict
- Man-in-the-Middle: Cookie передаётся незашифрованно — используй secure=True (HTTPS)
Правильная защита:
response.set_cookie(
"session_id",
value=generate_secure_token(),
max_age=3600,
secure=True,
httponly=True,
samesite="Strict",
path="/"
)
Token vs Cookie
Cookie автоматически отправляются браузером в каждом запросе, что удобно для аутентификации. Token (JWT) требует ручной отправки в Authorization header, но лучше работает с CORS и мобильными приложениями.
Cookie идеальны для традиционных web-приложений, token лучше для APIs и мобильных клиентов.