当前位置: 首页 > news >正文

flask中的session

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

session相当于用密钥签名加密的cookie,即用户可以查看你的cookie,但是如果没有密钥就无法修改它。

使用会话之前你必须设置一个密钥:

from flask import Flask,session,redirect,url_for,escape,request

app=Flask(__name__)

@app.route('/')

def index():

    if 'username' in session:

        return 'Logged in as %s' %escape(session['username'])

    return 'You are not logged in'

@app.route('/login',methods=['GET','POST'])

def login():

    if request.method=='POST':

        session['username']=request.form['username']

        return redirect(url_for('index'))

    return '''

          <form action="" method='post'>

               <p><input type=text name=username>

               <p><input type=sumbit value=Login>

          </form>

          '''

@app.route('/logout')

def logout():

    #如果会话中有用户名就删除它

    session.pop('username',None)

    return redirect(url_for('index'))

#设置密钥,复杂一点

app.secret_key='A0Zr98j/3yX R~XHH!jmN]LWX/,?RT'


这里用到的 escape() 是用来转义的。如果不使用模板引擎就可以像上例 一样使用这个函数来转义。

session的属性:

new:如果session是新的,那么就是True,否则是Flase

modified:如果session捕获到其已被修改,那么为True。但是在一些易变对象中,session的修改不被自动捕获,那么就需要自己显式地把它设置为True:

# this change is not picked up because a mutable object (here# a list) is changed.session['objects'].append(42)# so mark it as modified yourselfsession.modified = True

permanent:

如果设置为True的话,session的生命为 permanent_session_lifetime 秒(默认是31天)。如果设置为Flase的话,那么当用户关闭浏览器时,session便被删除了。

如何生成一个好的密钥:

可以使用随机生成器来生成一个好的随机种子:

>>>import os

>>>os.urandom(24)

'\xfd{H\xe5<\x95\xf9\xe3\x96.5\xd1\x01O<!\xd5\xa2\xa0\x9fR"\xa1\xa8'

基于 cookie 的会话的说明: Flask 会把会话对象中的值储存在 cookie 中。在打开 cookie 的情况下,如果你访问会话对象中没有的值,那么会得到模糊的错误信息:请检查 页面 cookie 的大小是否与网络浏览器所支持的大小一致。


转载于:https://my.oschina.net/935572630/blog/369962

相关文章:

  • mk-parallel-dump 实验
  • 配置Windows环境的DNS轮询(简单的负载均衡)
  • Out of memory (Needed 16777224 bytes)的错误解决
  • Servlet、Filter、Listener总结
  • 《The One!团队》第八次作业:ALPHA冲刺(二)
  • HttpClient 4.3.3 cookie rejected的解决办法
  • 大象也能起舞,Citrix X1计划让你对笔记本电脑say good bye
  • VOA 2009/11/02 DEVELOPMENT REPORT - In Kenya, a Better Life Through Mobile Money
  • 安装 chkrootkit报错:/usr/bin/ld: cannot find -lc
  • 大型网站技术架构(八)网站的安全架构
  • 32位程序在64位系统上获取系统安装时间
  • 怎样 配置这个网络拓扑
  • 关于烂代码的那些事(中)
  • Spring学习总结(4)——Spring AOP教程
  • CentOS 7安装配置Apache HTTP Server
  • go语言学习初探(一)
  • java取消线程实例
  • Joomla 2.x, 3.x useful code cheatsheet
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 力扣(LeetCode)56
  • 聊聊redis的数据结构的应用
  • 前端攻城师
  • 区块链将重新定义世界
  • 人脸识别最新开发经验demo
  • 深度学习中的信息论知识详解
  • 微服务核心架构梳理
  • 小程序开发中的那些坑
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 云大使推广中的常见热门问题
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #LLM入门|Prompt#3.3_存储_Memory
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • ***通过什么方式***网吧
  • ***原理与防范
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .naturalWidth 和naturalHeight属性,
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .NET/C# 使窗口永不获得焦点
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • ?.的用法
  • [04]Web前端进阶—JS伪数组
  • [1204 寻找子串位置] 解题报告
  • [2023-年度总结]凡是过往,皆为序章
  • [Angular] 笔记 9:list/detail 页面以及@Output
  • [C#]获取指定文件夹下的所有文件名(递归)
  • [codeforces] 25E Test || hash
  • [leetcode] 66. 加一
  • [LeetCode] Ransom Note 赎金条
  • [LWC] Components Communication
  • [OpenAI]继ChatGPT后发布的Sora模型原理与体验通道