### session:
1. session的基本概念:session和cookie的作用有点类似,都是为了存储用户相关的信息。不同的是,cookie是存储在本地浏览器,session是一个思路、一个概念、一个服务器存储授权信息的解决方案,不同的服务器,不同的框架,不同的语言有不同的实现。虽然实现不一样,但是他们的目的都是服务器为了方便存储数据的。session的出现,是为了解决cookie存储数据不安全的问题的。
2. session与cookie的结合使用:
* session存储在服务器端:服务器端可以采用mysql、redis、memcached等来存储session信息。原理是,客户端发送验证信息过来(比如用户名和密码),服务器验证成功后,把用户的相关信息存储到session中,然后随机生成一个唯一的session_id,再把这个session_id存储cookie中返回给浏览器。浏览器以后再请求我们服务器的时候,就会把这个session_id自动的发送给服务器,服务器再从cookie中提取session_id,然后从服务器的session容器中找到这个用户的相关信息。这样就可以达到安全识别用户的需求了。
* session存储到客户端:原理是,客户端发送验证信息过来(比如用户名和密码)。服务器把相关的验证信息进行一个非常严格和安全的加密方式进行加密,然后再把这个加密后的信息存储到cookie,返回给浏览器。以后浏览器再请求服务器的时候,就会自动的把cookie发送给服务器,服务器拿到cookie后,就从cookie找到加密的那个session信息,然后也可以实现安全识别用户的需求了。

### flask操作session:
1. 设置session:通过`flask.session`就可以操作session了。操作`session`就跟操作字典是一样的。`session['username']='zhiliao'`。
2. 获取session:也是类似字典,`session.get(key)`。
3. 删除session中的值:也是类似字典。可以有三种方式删除session中的值。
* `session.pop(key)`。
* `del session[key]`。
* `session.clear()`:删除session中所有的值。
4. 设置session的有效期:如果没有设置session的有效期。那么默认就是浏览器关闭后过期。如果设置session.permanent=True,那么就会默认在31天后过期。如果不想在31天后过期,那么可以设置`app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(hour=2)`在两个小时后过期。

 # coding:utf-8
from flask import Flask, session
from datetime import timedelta
import os app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(24)
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(hours=5) @app.route('/')
def hello_world():
session['username'] = 'saber'
# session permanent 持久化置为True则session课保存31天.
session.permanent = True
return 'Hello World!' @app.route('/get_session/')
def get_session():
username = session.get('username')
return username or u'no session set' @app.route('/delete_session/')
def delete_session():
# clear session 'username'
session.pop('username')
# clear all session.
session.clear()
return 'delete success.' if __name__ == '__main__':
app.run(debug=True)

一、配置SECRET_KEY

因为flask的session是通过加密之后放到了cookie中。所以有加密就有密钥用于解密,所以,只要用到了flask的session模块就一定要配置“SECRET_KEY”这个全局宏。一般设置为24位的字符。配置方法一般有两种。

配置方法一:

新建一个config.py的文件配置secret_key 
config.py

  SECRET_KEY = 'XXXXXXXXX' 

然后在主运行文件里面添加config文件里面的内容。 
main.py

 # encoding: utf-8

 from flask import Flask,session
import config app = Flask(__name__)

配置方法二:

直接在主运行文件里面配置。配置config的时候也是和操作字典是一样的 
main.py

 # encoding: utf-8

 from flask import Flask,session

 app = Flask(__name__)
app.config['SECRET_KEY'] = 'XXXXX'

产生方法

 可以引入OS模块中的产生一个24位的随机字符串的函数,这种方法有个缺点,就是服务器每次启动之后这个SECRET_KEY的值都会变。具体自己体会!

 import os

 app.config['SECRET_KEY'] = os.urandom(24) # 随机产生24位的字符串作为SECRET_KEY

二、操作session –操作session就如同操作字典!

1.设置session

 from flask import Flask,session
import os app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(24) # 设置session
@app.route('/')
def set():
session['username'] = 'liefyuan' # 设置“字典”键值对
return 'success' if __name__ == '__main__':
app.run()

2.读取session

 因为session就像字典一样所以,操作它的时候有两种方法:

  • (1)result = session[‘key’] :如果内容不存在,将会报异常
  • (2)result = session.get(‘key’) :如果内容不存在,将返回None

所以,使用第二种方法获取session较好。

 from flask import Flask,session
import os app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(24) # 设置session
@app.route('/')
def set():
session['username'] = 'liefyuan' # 设置“字典”键值对
return 'success' # 读取session
@app.route('/get')
def get():
# session['username']
# session.get('username')
return session.get('username') if __name__ == '__main__':
app.run()

3.删除session

 #encoding: utf-8

 from flask import Flask,session
import os app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(24) # 设置session
@app.route('/')
def set():
session['username'] = 'liefyuan'
return 'success' # 读取session
@app.route('/get/')
def get():
# session['username']
# session.get('username')
return session.get('username') # 删除session
@app.route('/delete/')
def delete():
print session.get('username')
session.pop('username')
print session.get('username')
return 'success' if __name__ == '__main__':
app.run()

4.清除session中所有数据

 #encoding: utf-8

 from flask import Flask,session
import os app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(24) # 设置session
@app.route('/')
def set():
session['username'] = 'liefyuan'
return 'success' # 读取session
@app.route('/get')
def get():
# session['username']
# session.get('username')
return session.get('username') # 删除session
@app.route('/delete')
def delete():
print session.get('username')
session.pop('username')
print session.get('username')
return 'success' # 清除session中所有数据
@app.route('/clear')
def clear():
print session.get('username')
# 清除session中所有数据
session.clear
print session.get('username')
return 'success' if __name__ == '__main__':
app.run()

三、设置session的过期时间

 如果没有指定session的过期时间,那么默认是浏览器关闭后就自动结束。session.permanent = True在flask下则可以将有效期延长至一个月。下面有方法可以配置具体多少天的有效期。

  • 如果没有指定session的过期时间,那么默认是浏览器关闭后就自动结束
  • 如果设置了session的permanent属性为True,那么过期时间是31天。
  • 可以通过给app.config设置PERMANENT_SESSION_LIFETIME来更改过期时间,这个值的数据类型是datetime.timedelay类型。

使用的需求:

  • 1.在登录网页界面,下面有一个“记住我”选项,如果点击了则设置session的有效期长一点。就是设置这个!
 # 设置session
@app.route('/')
def set():
session['username'] = 'liefyuan'
session.permanent = True # 长期有效,一个月的时间有效
return 'success'

一种更先进的配置有效期的方法:(比如配置7天有效)

  • 1.引入包:from datetime import timedelta
  • 2.配置有效期限:app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7) # 配置7天有效
  • 3.设置:session.permanent = True
 #encoding: utf-8

 from flask import Flask,session
from datetime import timedelta
import os app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(24)
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7) # 配置7天有效 # 设置session
@app.route('/')
def set():
session['username'] = 'liefyuan'
session.permanent = True
return 'success'

Session的定义

Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。

对session的操作如下

 from flask import Flask,session
import os
from datetime import timedelta
app = Flask(__name__)
app.config['SECRET_KEY']=os.urandom(24) #设置为24位的字符,每次运行服务器都是不同的,所以服务器启动一次上次的session就清除。
app.config['PERMANENT_SESSION_LIFETIME']=timedelta(days=7) #设置session的保存时间。
#添加数据到session
#操作的时候更操作字典是一样的
#secret_key:----------盐,为了混淆加密。 @app.route('/')
def hello_world():
session.permanent=True #默认session的时间持续31天
session['username'] = 'xxx' return 'Hello World!' #获取session
@app.route('/get/')
def get():
return session.get('username') #删除session
@app.route('/delete/')
def delete():
print(session.get('username'))
session.pop('username')
print(session.get('username'))
return 'delete'
#清楚session
@app.route('/clear/')
def clear():
print(session.get('username'))
session.clear()
print(session.get('username'))
return 'clear' if __name__ == '__main__':
app.run(debug=True)

SECRET_KEY

secret_key设置成os.urandom(24)这样的写法再项目中不合适,因为没次启动服务器这个值都会改变,所以所有保存的session都失效。现在只是学习阶段,所以就可以随机产生。

Flask的session的更多相关文章

  1. Flask的session——关于写扩展所学习到的

    这两天端午节.趁着端午节没事干,写了个flask的扩展--flask-RedisSession 在flask中使用该扩展可以让你借助redis数据库轻松获得server-side session. 这 ...

  2. Flask的session使用

    由于http是无状态保存的协议,session可以看作不同请求之间保存数据的一种机制.flask的session是基于cookie的会话保持. 流程 当客户端进行第一次请求的时候,客户端的HTTP r ...

  3. FLASK 的Session和MoudelForm插件

    falsk是小而精的框架,但是热度高, 所有很多爱好者提供了很多扩展插件 功能强大,美而不足的就是兼容稳定性有时候不太好,不过大部分还是很可以的 Flask-Session flask内置sessio ...

  4. 第六篇 flask中session

    Flask中的Session非常的奇怪,他会将你的SessionID存放在客户端的Cookie中,使用起来也非常的奇怪 Flask 中 session 的使用 1. Flask 中 session 是 ...

  5. Flask里面session的基本操作

    #session是依赖于flask的session模块 #如果想使用session模块,在配置里必须定义sessionkey from flask import Flask,session #建立对象 ...

  6. flask 的session

    python的flask操作设置.获得与删除session 首先讲一下Python的flask中session与cookies的关系,session是储存在服务器中的,cookies是储存在浏览器本地 ...

  7. Flask之session相关

    Flask的session简介 除请求对象之外,还有一个 session 对象.它允许你在不同请求间存储特定用户的信息.它是在 Cookies 的基础上实现的,并且对 Cookies 进行密钥签名要使 ...

  8. flask自定义session

    根据内置session原理可以进行session的定制: #!/usr/bin/env python # -*- coding:utf-8 -*- import uuid import json fr ...

  9. Flask 进阶session和上下文管理解析

    session的源码流程 将session放置在redis中 安装 pip install flask-session 使用 import redis from flask import Flask, ...

随机推荐

  1. Python3 函数基础2

    目录 可变长参数 可变长形参: *args 可变长实参: *容器类 可变长形参: **kwargs 可变长实参: **字典 函数对象 引用 当做容器类型元素 当做参数传给一个函数 当做函数的返回值 函 ...

  2. jmeter微信公众号接口测试实例

    线程组 HTTP Cookie 管理器 HTTP 请求默认值 用户定义的变量 察看结果树 HTTP请求 响应断言 正则表达式提取器 线程组 HTTP Cookie 管理器 HTTP 请求默认值 用户定 ...

  3. 面试题-JS中的作用域相关问题

    对象类型: 原始数据类型存储的是值,而对象类型存储的是地址(指针).下面的这个例子就比较有意思了. 先看题: function test(person) { person.age = 26 perso ...

  4. 整理了2019年上千道Java面试题,近500页文档,用了1个月时间!

    spring 面试题 1.一般问题 1.1.不同版本的 spring Framework 有哪些主要功能? 1.2.什么是 spring Framework? 1.3.列举 spring Framew ...

  5. 注解slf4j的日志该用哪个级别

    slf4j的日志级别分为五种 info.debug.error.warn.trane 常用的是这是三个.         info  一般处理业务逻辑的时候使用,就跟 system.err打印一样,用 ...

  6. 从头实现一个WPF条形图

    时间如流水,只能流去不流回! 点赞再看,养成习惯,这是您给我创作的动力! 本文 Dotnet9 https://dotnet9.com 已收录,站长乐于分享dotnet相关技术,比如Winform.W ...

  7. 【每天一题】LeetCode 121. 买卖股票的最佳时机

    开源地址:点击该链接 题目描述 * https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock * 题目描述: * 给定一个数组, ...

  8. C# get md5,renamed file and can not change file's md5

    using System; using System.Text; using System.IO; using System.Security.Cryptography; namespace Cons ...

  9. c++-面向对象类的示例-求周长面积,判断体积相等-文件操作和一般操作

    面向对象编程示例:求周长和面积 #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; //圆的周 ...

  10. 2.Android-sdk目录介绍、ADT使用介绍、创建helloworld

    1.android中常用名词介绍 ADT:  ADT为Eclipse的插件.为Eclipse和SDK之间起了一个桥梁的作用. SDK: 软件开发工具包(Soft Development Kit),它为 ...