[学习记录]Flask会话维护

前置知识:

1.http是一种无状态的通信协议,本身不保存通信状态

2.web服务器本质上负责接收用户的请求(request)并按照规则给予用户响应(response)

3.会话(session)是web服务器用来管理用户的一种方式,在一次会话中web服务器认为自己所有的通信都是与同一个用户进行的

4.cookie是一种实现会话的方式

然后进入正题,参考文档:flask官方文档

为了方便起见直接使用官方提供的demo代码,仅对login函数进行了修改,在添加完session后打印session内容

 1 @app.route(‘/login‘, methods=[‘GET‘, ‘POST‘])
 2 def login():
 3     if request.method == ‘POST‘:
 4         session[‘username‘] = request.form[‘username‘]
 5         print(session)
 6         return redirect(url_for(‘index‘))
 7     return ‘‘‘
 8         <form action="" method="post">
 9             <p><input type=text name=username>
10             <p><input type=submit value=Login>
11         </form>
12     ‘‘‘

以下内容为实战运行时的结果分析

1.直接访问站点,显示未登录

2.访问/login,完成登录

网页显示

服务器显示

观察http协议包

请求包如下

用post方法提交了一个表单上去

响应如下

服务器设置了一个cookie,并且给出了302重定向响应,重定向回路径‘/’

此时浏览器直接请求新的路径,请求包如下

已经带上了cookie

服务器响应如下

一个正常的200响应

3.访问logout

访问logout,浏览器显示

查看请求包

正常地携带cookie的请求

查看响应包

同样给出了302重定向,同时又进行了一次cookie设置,不过此时直接将cookie设置为空

重定向的通信如下图

此时浏览器发送的请求里已经没有cookie了

4.使用不同浏览器进行访问

接下来同时使用ie浏览器和chrome浏览器进行访问

chrome访问结果如下

服务器显示如下

再使用ie浏览器访问

服务器显示

经对比可见两个浏览器分得的cookie并不一样,此时刷新chrome页面也仍然是显示使用chrome用户登陆的

修改index函数,使其能够打印session的值

1 @app.route(‘/‘)
2 def index():
3     if ‘username‘ in session:
4         print(session)
5         return ‘Logged in as %s‘ % escape(session[‘username‘])
6     return ‘You are not logged in‘

刷新chrome与ie

由此可见session与cookie有关,根据不同的cookie服务器对session的判断也不同

这里提供一份flask的源码解析博客

其中指出flask的会话管理完全依赖cookie执行,服务器本身不保存相关数据,放到cookie中交给客户端保存

当客户端提交cookie时,服务器从cookie中解析出session,完成会话。

这就是flask默认提供的session功能,如果需要更加安全地将session保存到服务器,则需要使用flask-session库

原文地址:https://www.cnblogs.com/trickofjoker/p/11057875.html

时间: 2024-10-11 01:31:14

[学习记录]Flask会话维护的相关文章

[学习记录]flask资源加载

1.flask返回静态文件 在py文件目录下建立static文件夹,内放置静态文件,调用代码如下 return app.send_static_file('file.html') 其中file.html的真实路径为/static/file.html 2.flask返回模板文件 在py文件目录下建立templates文件夹,内放置静态文件,调用代码如下 return render_template('graph.html') 模板可以是一般的html文件,graph.html的路径为/templa

PHP学习记录之会话处理

1.cookie <?php //创建一个cookie setcookie('username','jimtang'); //判断是否存在 if(isset($_COOKIE['username'])) { echo $_COOKIE['username']; } else { echo 'cookie不存在'; } ?>//cookie的删除//方法1.<?phpsetcookie('username','');//赋空值?>//方法2.<?phpsetcookie('us

PHP学习记录之会话处理(二)

session的 用法 <?php //开启session session_start(); $_SESSION['name']='jimtang'; if(isset($_SESSION['name'])) { echo $_SESSION['name']; } else { echo 'session不存在'; } ?> session的删除和销毁的方法 <?php //开启session session.star(); $_SESSION['name']='jimtang'; if

[ZHUAN]Flask学习记录之Flask-SQLAlchemy

From: http://www.cnblogs.com/agmcs/p/4445583.html Flask-SQLAlchemy库让flask更方便的使用SQLALchemy,是一个强大的关系形数据库框架,既可以使用orm方式操作数据库,也可以使用原始的SQL命令. Flask-Migrate 是一个数据迁移框架,需要通过Flask-script库来操作. 一.配置Flask-SQLAlchemy 程序使用的数据库地址需要配置在SQLALCHEMY_DATABASE_URI中,SQLALch

JavaWeb学习笔记五 会话技术Cookie&amp;Session

什么是会话技术? 例如网站的购物系统,用户将购买的商品信息存储到哪里?因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并不知道该客户端是谁,所以需要会话技术识别客户端的状态.会话技术是帮助服务器记住客户端状态(区分客户端). 从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,成为一次会话.会话技术就是记录这次会话中客户端的状态与数据的.会话技术分为Cookie和Session: Cookie:数据存储在客户端本地,减少服务器端的存储的压力,安全性不好,客户端可以清除

Settings app简单学习记录

Settings是android系统设置的入口.主界面由Settings.java以及settings_headers.xml构成. Settings类继承自PreferenceActivity,而PreferenceActivity又继承自ListActivity,ListActivity拥有ListView和ListAdapter类型的成员变量. 1,如何使用PreferenceActivity构建页面 使用addPreferencesFromIntent或者addPreferencesFr

iOS学习记录之-AvAudioPlayer

前言:这两天老师布置了一个作业,编写一个音乐播放器的程序,使用AvAudioPlayer类. AvAudioPlayer类是编写iOS播放器的三个类之一,其他两个以后用到再阐述.今天的主角是AvAudioPlayer.下面我们来一起看看这个类 首先介绍一下,AvAudioPlayer它是苹果公司封装好的一个类,用起来很方便,功能也很强大,但是它只支持播放沙盒存好的音乐,不支持在线播放,是苹果公司自家ipod 播放器专用的.这点大家知道即可不必深究: 好,言归正传: 1,创建AvAudioPlay

JavaScript学习记录day1

JavaScript学习记录day1 学习 javascript JavaScript学习记录day1 1. 快速入门 2. 编程工具 3. 语法 4. 注释 5. 大小写 JavaScritps 是什么? JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能. 在Web世界里,只

Python学习记录day5

title: Python学习记录day5 tags: python author: Chinge Yang date: 2016-11-26 1.多层装饰器 多层装饰器的原理是装饰器装饰函数后其实也是一个函数这样又可以被装饰器装饰. 编译是从下至上进行的执行时是从上至下进行. #!/usr/bin/env python # _*_coding:utf-8_*_ ''' * Created on 2016/11/29 20:38. * @author: Chinge_Yang. ''' USER