内容简介:上一篇,我们说到cookie,除了cookie外还有一个叫session的机制。session也是可以存储一些信息的。对于一些敏感、重要的信息,我们可以存储到session中。谁也不希望自己的余额、银行卡密码存到cookie当中。 cookie和session结合使用:web开发发展至今,cookie和session的使用已经出现了一些非常成熟的方案。在如今的市场或者企业里,一般有两种存储方式:存储在服务端:通过cookie存储一个session_id,然后具体的数据则是保存在session中。如果用户已经
上一篇,我们说到cookie,除了cookie外还有一个叫session的机制。session也是可以存储一些信息的。对于一些敏感、重要的信息,我们可以存储到session中。谁也不希望自己的余额、银行卡密码存到cookie当中。 cookie和session结合使用:web开发发展至今,cookie和session的使用已经出现了一些非常成熟的方案。在如今的市场或者企业里,一般有两种存储方式:
存储在服务端:通过cookie存储一个session_id,然后具体的数据则是保存在session中。如果用户已经登录,则服务器会在cookie中保存一个session_id,下次再次请求的时候,会把该session_id携带上来,服务器根据session_id在session库中获取用户的session数据。就能知道该用户到底是谁,以及之前保存的一些状态信息。这种专业术语叫做server side session。
将session数据加密,然后存储在cookie中。这种专业术语叫做client side session。flask采用的就是这种方式,但是也可以替换成其他形式。
二、session
每个网站都有登录功能,当登录成功,一段时间都不需要再登录了。那登录保持这个状态我们就可以通过session来搞定。 flask里面的session必须要设置 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) # 运行程序
复制代码
首页我们先访问一下首页:
会重新到首页:
我们在新开一个浏览器标签在去访问一下首页:
flask把session的信息加密保存到cookie里面。我们看一下:
三、过期时间
如果没有设置session的有效期。那么默认就是浏览器关闭后过期。 如果设置session.permanent=True,那么就会默认在31天后过期。 如果不想在31天后过期,那么可以设置app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(hour=2)在两个小时后过期。
四、删除session
删除session中的值:也是类似字典。可以有三种方式删除session中的值。 session.pop(key) del session[key] session.clear()
五、把session存在服务端
我们可以利用flask-session来把session存在服务器,毕竟session的数据比较重要,存在浏览器中不安全。
flask-session支持把session存在各种数据库中
- redis
- memcached
- filesystem
- mongodb
- sqlalchmey
我们最好把session存在内存级的 redis 数据库中,读写速度比较快。
首先先安装flask-session
pip install flask-session pip install redis 复制代码
然后启动我们的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)
复制代码
运行程序。
这个是浏览器的就是session的id。并不是session的值,可以去redis的数据库看一下。
欢迎关注我的公众号:
以上所述就是小编给大家介绍的《Flask框架从入门到精通之Session(九)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Genesis框架从入门到精通(7): 框架的过滤器
- Genesis框架从入门到精通(10): 样式函数
- Flask框架从入门到精通之扩展脚本(十五)
- Flask框架从入门到精通之模型查询(十三)
- Flask框架从入门到精通之Response(七)
- Flask框架从入门到精通之Request(六)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
PHP and MySQL Web Development
Luke Welling、Laura Thomson / Sams / July 25, 2007 / $49.99
Book Description PHP and MySQL Web Development teaches you to develop dynamic, secure, commerical Web sites. Using the same accessible, popular teaching style of the three previous editions, this b......一起来看看 《PHP and MySQL Web Development》 这本书的介绍吧!