English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Сессия Flask (Session)

В отличие от 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Как показано ниже -