English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В отличие от Cookie, данные сессии хранятся на сервере. Сессия - это период времени, когда клиент вошел в систему и вышел из нее. Данные, которые нужно хранить в этой сессии, хранятся в временном каталоге на сервере.
Присваивается сессия ID для каждого клиента. Данные сессии хранятся в заголовке cookie, сервер подписывает их в зашифрованном виде. Для этой подписи приложение Flask требует определения SECRET_KEY.
Объект сессии также является словарем, содержащим ключи переменных сессии и их значения.
Например, чтобы установить переменную сессии 'username', используйте предложение -
# Имя файла: example.py # Авторские права: 2020 By w3codebox # Автор: ru.oldtoolbag.com # Дата: 2020-08-08 Session['username'] = 'admin'
Чтобы удалить переменную сессии, используйте метод pop().
# Имя файла: example.py # Авторские права: 2020 By w3codebox # Автор: ru.oldtoolbag.com # Дата: 2020-08-08 session.pop('username', None)
Следующий код является простым примером того, как сессия работает в Flask. URL => '/' предлагает пользователю войти в систему, так как переменная сессии username не установлена.
# Имя файла: example.py # Авторские права: 2020 By w3codebox # Автор: ru.oldtoolbag.com # Дата: 2020-08-08 @app.route('/') def index(): if 'username' in session: username = session['username'] возврат 'Вошел как ' + username + '<br>' + \ "<b><a href = '/logout'>нажмите aquí для выхода</a></b>" возврат "Вы не вошли в систему <br><a href = '/login'></b>" + \ "нажмите aquí для входа</b></a>"
Когда пользователь переходит по URL => '/login', функция login() показывает вид, так как она вызывается методом GET, поэтому открывается форма для входа.
После заполнения формы повторно отправьте её на URL => /login, теперь переменная сессии установлена. Приложение будет перенаправлено на URL => /. В этот момент будет найдена переменная сессии: username.
# Имя файла: example.py # Авторские права: 2020 By w3codebox # Автор: ru.oldtoolbag.com # Дата: 2020-08-08 @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': session['username'] = request.form['username'] return redirect(url_for('index')) return ''' <form action="" method="post"> <p><input type = text name = "username"/></p> <p><input type = submit value = Login/></p> </form> '''
Данное приложение также содержит вид функцию logout(), которая удаляет значение переменной сессии 'username'. Вновь URL-переход к '/'. Отображается начущая страница.
# Имя файла: example.py # Авторские права: 2020 By w3codebox # Автор: ru.oldtoolbag.com # Дата: 2020-08-08 @app.route('/logout') def logout(): # Удалить имя пользователя из сессии, если оно есть session.pop('username', None) return redirect(url_for('index'))
Запустите приложение и перейдите на главную страницу (увернитесь, что установлено значение secret_key приложения).
# Имя файла: example.py # Авторские права: 2020 By w3codebox # Автор: ru.oldtoolbag.com # Дата: 2020-08-08 from flask import Flask, session, redirect, url_for, escape, request app = Flask(__name__) app.secret_key = 'any random string’
Полный код приведен ниже -
# Имя файла: example.py # Авторские права: 2020 By w3codebox # Автор: ru.oldtoolbag.com # Дата: 2020-08-08 from flask import Flask from flask import render_template from flask import request from flask import make_response from flask import Flask, session, redirect, url_for, escape, request app = Flask(__name__) app.secret_key = 'fkdjsafjdkfdlkjfadskjfadskljdsfklj' @app.route('/') def index(): if 'username' in session: username = session['username'] возврат 'Имя пользователя: ' + username + '<br>" "<b><a href = '/logout'>Нажмите здесь для выхода</a></b>" возврат "Вы не вошли в систему, <br><a href = '/login'></b>" + ", "Нажмите здесь, чтобы войти</b></a>" @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': session['username'] = request.form['username'] return redirect(url_for('index')) return ''' <form action="" method="post"> <p><input type="text" name="username"/></p> <p><input type="submit" value="Войти"/></p> </form> ''' @app.route('/logout') def logout(): # Удалить имя пользователя из сессии, если оно есть session.pop('username', None) return redirect(url_for('index')) if __name__ == '__main__': app.run(debug=True)
Вывод будет выглядеть следующим образом. Нажмите на ссылку “ Нажмите здесь, чтобы войти”
Эта ссылка будет перенаправлена на другой интерфейс. Введите ‘admin’.
Экран будет отображать сообщение “ Имя пользователя для входа: adminКак показано ниже -