flask session工作机制:

把敏感数据经过加密后放入到‘session’中,然后在把'session'存放到cookie中,下次请求的时候,再从浏览器发送过来的cookie中读取session,在从session中读取敏感数据,并进行解密,获取最终的用户数据,这种session机制可以节省服务器开销,因为所有的信息都存到了客户端

操作session

from flask import Flask,session
import os app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom()      #设置secret_key 用来作为加盐加密使用,每次服务重启后都会变化,之前的session就不能用这个来解密了 @app.route('/')
def hello_world():
session['username'] = 'bb'            #添加session
return 'Hello World!' @app.route('/get/')
def get():                      #获取session
return session.get('username') @app.route('/delete/')        
def delete():                    #删除session
session.pop('username') #删除session
#session.clear()             #清空session里的所有数据return "sucess" if __name__ == '__main__':
app.run(host='192.168.132.130',debug=True)

使用案例:

#!/usr/bin/env python
#-*-coding:utf-8-*- from . import homebapp
from flask import render_template,redirect,url_for,request,flash,session,send_from_directory
from models import User,UserLog
from .forms import RegistUser,LoginForm,UserForm
from werkzeug.security import generate_password_hash
from movie_project import db,app
import uuid,os
from functools import wraps
from werkzeug.utils import secure_filename

#登录的装饰器,利用session控制
def login_required(func):
@wraps(func)
def decorated_function(*args, **kwargs):
if session.get('user'):   #验证session
return func(*args, **kwargs)
else:
return redirect(url_for('home.login',next=request.url))
return decorated_function @homebapp.route("/login/",methods=['GET','POST'])
def login():
form = LoginForm()
if form.validate_on_submit():
data = form.data
user = User.query.filter_by(name=data['account']).first()
if user is None:
flash("账号不存在",'err')
return redirect(url_for('home.login'))
else:
if not user.check_pwd(data['pwd']):
print (data['pwd'])
flash("密码不正确",'err')
return redirect(url_for('home.login'))
flash("登录成功",'ok')
session['user_id'] = user.id        #登录成功,添加session
session['user'] = user.name
userlog = UserLog(
user_id = user.id,
ip=request.remote_addr
)
db.session.add(userlog)
db.session.commit()
return redirect(url_for('home.user')) return render_template('home/login.html',form=form) #登出操作清除session
@homebapp.route("/logout/")
def logout():
session.pop('user',None)
session.pop('user_id',None)
return redirect(url_for('home.login')) @homebapp.route('/user/',methods=['GET','POST'])
@login_required
def user():
form = UserForm()
user = User.query.get(int(session['user_id']))
form.face.validators = []
if request.method == 'GET':
form.name.data = user.name
form.email.data = user.email
form.phone.data = user.phone
form.des.data = user.info
if form.validate_on_submit():
data = form.data
return render_template('home/user.html',form = form,user=user)

flask session的更多相关文章

  1. flask-admin章节四:flask session的使用

    1. 关于session flask session可能很多人根本都没有使用过,倒是cookie大家可能使用得比较多.flask cookie使用起来比较简单,就两个函数,读取和设置. 具体使用方式如 ...

  2. Flask Session 详解

    会话session ,允许你在不同请求 之间储存信息.这个对象相当于用密钥签名加密的 cookie ,即用户可以查看你的 cookie ,但是如果没有密钥就无法修改它. from flask impo ...

  3. Flask Session 使用和源码分析 —— (6)

    基本使用 from flask import Flask, session, redirect, url_for, escape, request app = Flask(__name__) @app ...

  4. 11.4 Flask session,闪现

    session 加密后放在用户浏览器的 cookie 中 于django 的自带session 不同,flask 的 session 需要导入 from flask import session 添加 ...

  5. 【Flask】Flask Session操作

    ### session:1. session的基本概念:session和cookie的作用有点类似,都是为了存储用户相关的信息.不同的是,cookie是存储在本地浏览器,session是一个思路.一个 ...

  6. flask session 使用默认配置修改session不生效问题

    flask session相关 使用flask 默认sessio是存储在浏览器的cookie中,当请求返回时会将session写在cooKie中,但是在写的时候,默认并不是每次都重新写入 比如下例子 ...

  7. 六十一:Flask.Session之flask操作session

    1.设置session:使用flask.session就可以操作字典,操作方式和操作字典一样:session['key']=value2.获取session,和获取字典的值一样:session['ke ...

  8. Flask session到期时间设置 用户登录与登出

    flask版本 1.1.1 最近学习Flask开发,看官方文档产生疑问,就是session有效期的问题,默认貌似是没有有效期的,只有关闭浏览器session才会失效,其实控制session的有效期非常 ...

  9. HCTF2018-admin[flask session 伪造]

    知识点:flask session 伪造 flask中session是存储在客户端cookie中的,也就是存储在本地.flask仅仅对数据进行了签名.众所周知的是,签名的作用是防篡改,而无法防止被读取 ...

随机推荐

  1. linux 目录分类与文件操作

    / 虚拟根目录 一般不会在这里存储文件 /bin 二进制目录,存放需要GNU用户级的工具 /boot 启动目录,存放启动文件 /dev 设备目录,linux在这里创建设备节点 /etc 系统配置文件目 ...

  2. Base64 总结

    Base64编码是解决一些无法打印的字符无法显示的问题,将8位的ascii编码转换为6位的表示64个可见字符的算法. 具体而言,首先将编码每三个分成一组,将三个字符转换为总长为24位的二进制 数字,将 ...

  3. 简单聊聊Linux学习经历

    学习,是我们一生中都规避不了的一个话题,人的一生中都是在不断的学习,无论是功成名就的人士,还是一无是处的小混混,始终都处在一个不断学习的环境中,只是学习的内容千差万别,有的人是为了提升自己各方面的能力 ...

  4. sklearn训练感知器用iris数据集

    简化版代码 from sklearn import datasets import numpy as np #获取data和类标 iris = datasets.load_iris() X = iri ...

  5. CentOS安装GIt、上传项目到git仓库

    上传项目 登录服务器后安装git yum install git 新建文件夹(仓库) mkdir *.git 初始化仓库 git init --bare *.git 在本地初始化仓库 git init ...

  6. windows新增/修改/删除系统环境变量bat示例,一键配置JAVA_HOME

    setx JAVA_HOME "C:\Program Files\java\jdk1.6.0_27" /m setx classpath = ".;%JAVA_HOME% ...

  7. Codeforces Round #475 Div. 1

    B:当n是偶数时无解,因为此时树中有奇数条边,而我们每次都只能删除偶数条.当n是奇数时一定有解,因为此时不可能所有点度数都为奇数,只要找到一个度数为偶数的点,满足将它删掉后,各连通块大小都为奇数就可以 ...

  8. Android 永久保存简单数据

    转载: http://blog.csdn.net/xzlawin/article/details/45959033 方法1: 存数据: SharedPreferences userInfo = thi ...

  9. 【BZOJ4033】【HAOI2015】树上染色 树形DP

    题目描述 给你一棵\(n\)个点的树,你要把其中\(k\)个点染成黑色,剩下\(n-k\)个点染成白色.要求黑点两两之间的距离加上白点两两之间距离的和最大.问你最大的和是多少. \(n\leq 200 ...

  10. 加载样式TTFB waiting时间长

    1.谷歌浏览器64位 2.在调试网页的时候,每回修改一个,刷新时,速度很慢 3.结果很恼火.每调试一回等半天.效率低下.... 解决办法是: "在每个CSS规则的后面加一个空行". ...