session与cookie:

cookie是一项浏览器的技术,而不是服务器的技术,服务器端是无法直接操作cookie的,只能通过返回Response响应告诉浏览器怎么操作cookie。而session则更像是一种解决方案,一种在服务器端存储授权信息的解决方案,不同的语言,不同的框架对于session的实现方式可能都是不同的,对session的理解和操作可能都不一样。同时,session更是一种解决cookie安全隐患的方式,用户名和密码等信息都是存放在session中的,而session内容是无法被用户直接看到的。

session存储:

服务器生成的session信息既可以存放在服务器中(cookie中就只有session_id),也可以加密后存放在cookie中(浏览器拿到cookie后也不能知道加密的session内容), Flask就是采用的第二种机制。

操作session:

使用`from flask import session`对象,session对象就相当于一个字典,操作session时可以像操作字典一样去操作它,如:session['username'] = 'xiaoming',session.get('username'),session.pop('username'),session.clear()等。代码中导入此session对象后直接操作使用即可,它会自动加入cookie中并返回给浏览器,也会自动从访问的请求中的cookie中提取出来,所以不需要我们手动将它加入到Response的cookie中,也不需要手动从request的cookie中获取出来。

session加密:

使用session时,SECRET_KEY是必须配置的 ,这个值用来加密session内容然后返回给浏览器。如:`app.config['SECRET_KEY'] = os.urandom(24)`,即24位的随机数。

session有效期:

session默认有效期和cookie一样,直到浏览器回话结束。可以通过设置`session.permanent=True`来设置自定义的有效期,而此时默认有效期为31天,如果配置了PERMANENT_SESSION_LIFETIME,则以此配置项的值为准,此配置项的类型为`from datetime import timedelta`类型。如:`app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7)`,即有效期为7天。

简单示例:

import os
from datetime import timedelta from flask import Flask, session app = Flask(__name__)
# 使用session必须配置此SECRET_KEY,用于session的加密
app.config['SECRET_KEY'] = os.urandom(24)
# 没有配置此项时,默认为31天,配置后设置session.permanent=True时,以此配置项的值为准。
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7) @app.route('/')
def hello_world():
# 此session对象其实就相当于一个字典,可以当做字典来使用
# 此处设置了session后,会自动将此session内容加密后放入cookie中返回给浏览器
# session在浏览器cookie中的存放形式为:在cookie中添加一个“键值对”,key为“session”,value为session内容加密后的字符串。
session['username'] = 'xiaoming' # 设置session的持久化,默认为False,即有效期至浏览器回话结束,设置为True表示有效期为31天
session.permanent = True return 'Hello World!' @app.route('/username/')
def get_username():
# 获取session信息
username = session.get('username') return username or '没有用户登录!' @app.route('/delete_user/')
def del_user():
# 删除session信息
username = session.pop('username') return '{}成功删除!'.format(username) if username else '删除失败!' if __name__ == '__main__':
app.run(debug=True)

Flask笔记:session的更多相关文章

  1. flask笔记(三)Flask 添加登陆验证装饰器报错,及解析

    Flask 添加登陆验证装饰器报错,及解析 写这个之前,是想到一个需求,这个是关于之前写Flask笔记(二)中的一个知识点,路由相关 需求为 : 有一些页面必须是登陆之后才能访问的,比如Shoppin ...

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

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

  3. Flask的session使用

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

  4. FLASK 的Session和MoudelForm插件

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

  5. 第六篇 flask中session

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

  6. Flask里面session的基本操作

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

  7. flask 的session

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

  8. Flask之session相关

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

  9. flask自定义session

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

随机推荐

  1. JVM中优化指南

    JVM中优化指南 如何将新对象预留在年轻代 如何让大对象进入年老代 如何设置对象进入年老代的年龄 稳定的 Java 堆 VS 动荡的 Java 堆 增大吞吐量提升系统性能 尝试使用大的内存分页 使用非 ...

  2. Docker基础概念与安装

    Docker是什么? Docker最初是dotCloud公司的创始人Solomon Hyks在法国期间发起的一个公司内部项目,它是基于dotCloud公司多年云服务技术的一次革新,并于2013年3月以 ...

  3. jquery-uploadfile的使用(多文件异步上传)

    需求 在页面端可以在页面不刷新情况下上传多个有大小限制的word文件,并返回文件保存的路径,同时可以删除误上传的文件. 准备 下载该插件 该插件依赖jquery1.9.1版本(其它不清楚)*在jsp页 ...

  4. iOS 高效的分页加载(TableView、CollectionView)

    一.tableview的分页加载的代码对比 没有优化之前的代码如下 [strongSelf.tableView.mj_footer endRefreshing]: [strongSelf.articl ...

  5. 安卓开发笔记(三十三):Android仿写微信发现

    首先我们来看看仿写之后的效果: 看到是这个界面我们首先应该思考这些按钮是怎么做出来的?有了一个整体的思路之后才知道该怎么办.最开始我想的就直接利用button控件上面直接加上png的图片就可以形成一个 ...

  6. elasticsearch的window的安装和启动

    1.下载elasticserch的window和kibana的安装包 2.解压 进入elasticseach的bin目录下elasticsearch.bat  启动页面localhost:9200 3 ...

  7. Shell命令-搜索文件或目录之whereis、locate

    文件及内容处理 - whereis.locate 1. whereis:查找二进制命令,按环境变量PATH路径查找 whereis命令的功能说明 whereis 命令用于查找文件.该指令会在特定目录中 ...

  8. itest(爱测试) 4.1.1 发布,开源BUG 跟踪管理 & 敏捷测试管理软件

    v4.1.1下载地址 :itest下载 itest 简介:查看简介 itest 开源敏捷测试管理,testOps 践行者.可按测试包分配测试用例执行,也可建测试迭代(含任务,测试包,BUG)来组织测试 ...

  9. PyCharm2019.3专业版激活

    1. 首先到官网下载Professional(专业版),链接地址: https://www.jetbrains.com/pycharm/download/ 具体安装方法这里就不赘述 2. 下载补丁je ...

  10. 22.Java基础_StringBuilder类

    String类对象的拼接操作:执行到s+="world"语句时,常量池会先创建"world"对象,再去创建"helloworld"对象,最后 ...