admin管理员组文章数量:1642782
一.关于cookie 和 session的一些基础知识
- http请求时无状态的,第一次和服务器连接后并且登录成功,第二次服务器仍然不知道
当前是哪个用户。cookie就是为了解决这个问题
cookie存在浏览器中的,相对于是浏览器的
打开浏览器会发给服务器 - session存在服务器中,产生一个唯一的session_id
服务器将session_id和敏感信息做一个映射存储在session(服务器)中,更加安全 - session会有过期时间(如超星 过几天需要重新登录)
- flask中的session机制
- 把敏感数据加密之后放到session中,然后将session放到cookie中
下次请求时候,再从浏览器中发送过来的cookie中读取session,并进行解密,获取最终用户数据 - 节省开销,所有信息都在存储到客户端(浏览器)中,经过加密,也是比较安全
- 把敏感数据加密之后放到session中,然后将session放到cookie中
- flask session
通过from flask import session。然后将值key和value进去即可
并且Flask session机制是将session加密,然后存储在cookie中,如图所示。
二.项目结构
运行代码后,打开浏览器(右上角更多图标–>设置–>高级–>网站设置–>cookie),可以查看到一下内容
可以getSession查看刚才设置的cookie值
代码
from flask import Flask,session
import os
from datetime import timedelta
app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(24)
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7) # 设置cookie 的时间为7天
@app.route('/')
def hello_world():
session['username'] = 'jzj&jmm'
# 没有指定session的过期时间,默认为浏览器关闭后就自动关闭
# 设置该属性为True后, 当用户点击记住我的时候,会去检查 app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7) 的属性,决定session的过期时间
session.permanent = True # 过期时间为 31 天
# 体现在浏览器的 登陆的时候 为记住我 默认为session 31 天
return 'Hello World!'
# 获取session
@app.route('/getSession/')
def getSession():
# 两种方式
# session['username']如果username不存在,会抛出异常
# 推荐使用 session.get('username') 如果username不存在,返回NULL
return session.get('username')
# 删除 session
@app.route('/deleteSession/')
def deleteSeeion():
print(session.get('username'))
session.pop('username')
return ('success delete session')
# 更为彻底的一种删除方式
@app.route('/deleteSession2/')
def deleteSession2():
print(session.get('username'))
# 删除session中的所有数据
return ('success delete session')
if __name__ == '__main__':
app.run(debug=True)
会出现的一个问题
# 添加数据到session中
# 操作session和操作字典一样
"""
secret key: 24位 用os.urandom(24)产生
- 设置 SECRET_KEY :config.py
- 设置 SECRET_KEY :值
- 作用:加密算法,作为‘盐’加入到传送字符串,并且通过打乱,
即使有加密算法可逆计算,也不能得知这个字符串的含义
"""
- 从flask中导入session
- 使用session需要设置 SECRET_KEY,作为加密作用,并且这个SECRET_KEY,如果每次服务器重启之后都变化的话,那么之前的session就不能再通过这个SECRET_KEY进行解密了
- 解决 将app.config[‘SECRET_KEY’] = os.urandom(24)写死即可
过期时间
主要体现在以下代码片段的设置
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7) # 设置cookie 的时间为7天
# 没有指定session的过期时间,默认为浏览器关闭后就自动关闭
# 体现在浏览器的 登陆的时候 为记住我 默认为session 31 天
# 设置该属性为True后, 当用户点击记住我的时候,会去检查 app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7) 的属性,决定session的过期时间
session.permanent = True # 过期时间为 31 天
版权声明:本文标题:flask session 和 cookie(session的过期时间设置) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1729336796a1197090.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论