Очки знаний: 1. Сессия
1. Обзор
В прошлой статье мы говорили о куках, помимо куки есть еще механизм под названием сессия. Сеанс также может хранить некоторую информацию. Некоторую конфиденциальную и важную информацию мы можем хранить в сеансе. Никто не хочет, чтобы их баланс и пароль банковской карты хранились в файлах cookie. Комбинация файлов cookie и сеансов. С момента развития веб-разработки появилось несколько очень зрелых решений для использования файлов cookie и сеансов. На современном рынке или предприятии обычно существует два метода хранения:
Хранится на сервере: Session_id хранится через файл cookie, а затем конкретные данные хранятся на сеансе. Если пользователь уже вошел в систему, сервер будет сохранять сеанс_Ид в файле cookie, и в следующий раз, когда запрос сделан снова, сеанс_Ид будет передан, и сервер получит данные сеанса пользователя из библиотеки сеанса в соответствии с идентификатор сессии. Вы можете знать, кто пользователь и некоторая информация, сохраненная ранее. Этот технический термин называется сеансом Server Side.
Зашифруйте данные сеанса и храните его в cookie. Этот тип терминологии называется сеансом на стороне клиента. Фладка таким образом, но она также может быть заменена другими формами.
2. Сессия
На каждом веб-сайте есть функция входа в систему. После успешного входа нет необходимости повторно входить в систему в течение определенного периода времени. Если логин остается в этом состоянии, мы можем сделать это через сессию.
Сеанс в колбе должен быть установленSECRET_KEY
from flask import Flask, request, render_template, session, redirect
from datetime import datetime
app = Flask(__name__)
app.config['SECRET_KEY'] = 'laowangaigebi' # 设置session加密的密钥
@app.route('/login', methods=['GET', 'POST']) # 支持get、post请求
def login(): # 登录视图函数
# 模拟登录成功后把uid和username存到session里
session['uid'] = '123456'
session['username'] = 'laowang'
return redirect('/') # 登录成功后到首页
@app.route('/', methods=['GET', 'POST']) # 支持get、post请求
def index():
username = session.get('username') # 取session
if username:
return 'welcome %s' % username
else:
return '请登录'
app.config['DEBUG'] = True
if __name__ == '__main__':
# 0.0.0.0代表任何能代表这台机器的地址都可以访问
app.run(host='0.0.0.0', port=5000) # 运行程序
Главная Давайте сначала посетим домашнюю страницу:
Затем я нажимаю «Пожалуйста, войдите в систему» и переходите на страницу входа:http://0.0.0.0:5000/loginОн вернется на главную страницу:Давайте откроем новую вкладку браузера и посетим домашнюю страницу:Flask шифрует информацию о сеансе и сохраняет ее в файле cookie. Давайте взглянем:3. Срок годности
Если срок действия сессии не установлен. Затем по умолчанию срок действия истекает при закрытии браузера. Если установлено значение session.permanent=True, по умолчанию срок действия истекает через 31 день. Если вы не хотите, чтобы срок действия истекал через 31 день, вы можете установить для app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(hour=2) срок действия через два часа.
В-четвертых, удалить сеанс
Удалить значение в сессии: оно тоже похоже на словарь. Есть три способа удалить значение в сеансе. session.pop(ключ) удалить сеанс [ключ] сеанс.очистить()
5. Сохраните сеанс на стороне сервера
Мы можем использовать flask-session для хранения сессии на сервере, ведь данные сессии важнее и хранить их в браузере небезопасно.
flask-session поддерживает хранение сессий в различных базах данных
- redis
- memcached
- filesystem
- mongodb
- sqlalchmey
Нам лучше хранить сеанс в базе данных Redis на уровне памяти, которая быстрее читается и пишется.
Первая установка фляжной сессии
pip install flask-session
pip install redis
Затем запускаем наш редис и прописываем в коде следующую конфигурацию.
from flask import Flask, request, session
import redis
from flask_session import Session
# 初始化Session对象
f_session = Session()
app = Flask(__name__)
app.config['SECRET_KEY'] = 'laowangaigebi' # 加密的密钥
app.config['SESSION_USE_SIGNER'] = True # 是否对发送到浏览器上session的cookie值进行加密
app.config['SESSION_TYPE'] = 'redis' # session类型为redis
app.config['SESSION_KEY_PREFIX'] = 'session:' # 保存到session中的值的前缀
app.config['PERMANENT_SESSION_LIFETIME'] = 7200 # 失效时间 秒
app.config['SESSION_REDIS'] = redis.Redis(host='127.0.0.1', port='6379', db=4) # redis数据库连接
# 绑定flask的对象
f_session.init_app(app)
@app.route("/")
def index():
session['xingming'] = 'laozhao'
return '存session'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=True)
Запустите программу.
Это идентификатор сеанса браузера. Это не значение сеанса, вы можете зайти в базу данных Redis, чтобы посмотреть.Добро пожаловать, чтобы обратить внимание на мой общедоступный номер: