### 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. 从源码看Nacos的设计

    目录 客户端与集群的交互 数据同步 实例信息同步 服务集群信息 关于priv-raft协议 Nacos集群在k8s中的实践 这片博文来源于我在公司部门内的分享,我隐去了和公司项目相关的部分,重新整理, ...

  2. android studio 代码问题总结

    1,android studio隐藏title时,用eclipse里面的方法不行,所以用下面的代码解决,此代码需要写在 加载xml文件之后 getSupportActionBar().hide(); ...

  3. webpack学习_使用source map

    追踪错误和警告,JS提供sourcemap功能,将编译后的代码映射回原始代码(简单来说就是即使打包后,也可以检测知道该错误来自哪个JS文件).如果一个错误来自与b.js,那么source map回明确 ...

  4. pt-online-schema-change工具使用教程(在线修改大表结构)

    percona-toolkit中pt-online-schema-change工具安装和使用 pt-online-schema-change介绍 使用场景:在线修改大表结构 在线数据库的维护中,总会涉 ...

  5. web前端分享JavaScript到底是什么?特点有哪些?

    web前端分享JavaScript到底是什么?特点有哪些?这也是成为web前端工程师必学的内容.今天为大家分享了这篇关于JavaScript的文章,我们一起来看看. 一.JavaScript是什么? ...

  6. uni-app实现多端开发

    多端开发,听名字就感觉不一样,一套代码.多端使用,适用于各个平台.市面上很多关于多端开发的框架,比较常用,流行的框架 uni-app,Chameleon(变色龙),taro这些,都可以支持多端,一套代 ...

  7. 后台管理tab栏滑动解决方案

    后台管理系统中比较常见的布局是左边菜单栏,右边tab切换栏,但是一般的tab组件不包含tab页过多的切换问题的,所以需要个性化实现,本文的实现方案是滑动鼠标滚轮绑定tab达到切换的效果,先上一个动态图 ...

  8. Gradle-任务

    任务结果标签 当 Gradle 执行一个任务时,它会在控制台和 Tooling API 根据任务结果给任务打标签. 这些标签是根据任务是否有操作,是否应该执行操作,是否执行了操作以及这些操作做了哪些改 ...

  9. Kotlin 编程语言成为其 Android 应用程序开发人员的首选语言

    今年 5 月,谷歌在 I/O 大会上宣布,Kotlin 编程语言成为其 Android 应用程序开发人员的首选语言. Kotlin 是一种面向现代多平台应用程序的编程语言,成为谷歌开发 Android ...

  10. Unity Ruby's Adventure 第一步

    官方游戏教程:https://learn.unity.com/project/ruby-s-2d-rpg?language=en 鲁比大冒险是一个2D游戏入门教程,涉及动画,特效,UI,瓦片地图,音效 ...