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. Spring 使用介绍(九)—— 零配置(二)

    三.Bean定义 1.开启bean定义注解支持 开启注解支持须添加以下配置项: <context:component-scan base-package="cn.matt"/ ...

  2. Row_Number() over()

    分页 ROW_NUMBER() OVER (order by ID) 是先把ID列排序,再为排序以后的每条ID记录返回一个序号.

  3. BZOJ1004[HNOI2008]Cards——polya定理+背包

    题目描述 小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目前小春只有3种颜色:红色,蓝色,绿色.他询问Sun有多少种染色方案,Sun很快就给出了答案.进一步,小春要求染出Sr张红色,Sb张蓝色 ...

  4. POJ 3349-Snowflake Snow Snowflakes-字符串哈希

    哈希后,对每片雪花对比6次. #include <cstdio> #include <cstring> #include <vector> #include < ...

  5. .net MVC 访问404

    MVC 项目访问总是404 有几种情况: 1 地址打错了. 2 controller/action  但是action方法含有[ActionName("Index")] 重命名了. ...

  6. springboot使用redis

    1.pom文件中引入 spring-boot-starter-redis <dependency> <groupId>org.springframework.boot</ ...

  7. 【HDU - 5790 】Prefix(主席树+Trie树)

    BUPT2017 wintertraining(15) #7C 题意 求[min((Z+L)%N,(Z+R)%N)+1,max((Z+L)%N,(Z+R)%N)+1]中不同前缀的个数,Z是上次询问的结 ...

  8. Linux服务器定时健康检查,发生故障自动微信告警

    此脚本适用于于各种Linux环境,可以实现各种监控项目,可自定义阀值,实现不同监控效果已在原有脚本基础上做了简化,提取了主要功能目前实现的有:1.磁盘监控2.内存监控3.cpu负荷监控4.进程数监控5 ...

  9. Apache Ignite上的TensorFlow

    任何深度学习都是从数据开始的,这是关键点.没有数据,就无法训练模型,也无法评估模型质量,更无法做出预测,因此,数据源非常重要.在做研究.构建新的神经网络架构.以及做实验时,会习惯于使用最简单的本地数据 ...

  10. The Python Challenge 谜题全解(持续更新)

    Python Challenge(0-2) The Python Challengehttp://www.pythonchallenge.com/ 是个很有意思的网站,可以磨练使用python的技巧, ...