Ответ
Сессия — это механизм, позволяющий веб-приложению сохранять информацию о пользователе (состояние) между несколькими HTTP-запросами, которые по своей природе являются stateless.
Как это работает:
- При первом визите пользователя сервер создает для него уникальный идентификатор сессии (Session ID).
- Этот ID отправляется клиенту и хранится у него, чаще всего в
cookie
. - При последующих запросах клиент отправляет этот ID обратно на сервер.
- Сервер использует ID, чтобы найти и загрузить связанные с ним данные (например, информацию о пользователе, содержимое корзины).
Пример с использованием Flask:
from flask import Flask, session, request, redirect, url_for
app = Flask(__name__)
# 'secret_key' необходим для криптографической подписи данных сессии
app.secret_key = b'_5#y2L"F4Q8znxec]/'
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
# Сохраняем имя пользователя в сессии
session['username'] = request.form['username']
return redirect(url_for('profile'))
return '''
<form method="post">
<p><input type=text name=username>
<p><input type=submit value=Login>
</form>
'''
@app.route('/profile')
def profile():
# Проверяем, есть ли пользователь в сессии
if 'username' in session:
return f'Вы вошли как {session["username"]}'
return 'Вы не авторизованы'
Ключевые аспекты:
- Хранение данных: Данные сессии могут храниться на сервере (в памяти, файлах, базе данных) или на клиенте в подписанных cookie (как в Flask по умолчанию).
- Безопасность: Для защиты от перехвата сессии (session hijacking) критически важно использовать HTTPS и устанавливать для cookie флаги
HttpOnly
иSecure
.