Flask中Cookie和Session理解与作用介绍
作者:Ywx_csdn 发布时间:2022-05-03 21:50:35
前序
1、cookie介绍
Cookie是一段不超过4KB的小型文本数据,保存在客户端浏览器中,由一个名称(Name)、一个值(Value)和其它几个用于控制Cookie有效期、安全性、使用范围的可选属性组成。其中 :
(1) Name/Value:设置Cookie的名称及相对应的值,对于认证Cookie,Value值包括Web服务器所提供的访问令牌。
(2) Expires属性:设置Cookie的生存期。有两种存储类型的Cookie:会话性与持久性。Expires属性缺省时,为会话性Cookie,仅保存在客户端内存中,并在用户关闭浏览器时失效;持久性Cookie会保存在用户的硬盘中,直至生存期到或用户直接在网页中单击“注销”等按钮结束会话时才会失效 。
(3) Path属性:定义了Web站点上可以访问该Cookie的目录 。
(4) Domain属性:指定了可以访问该 Cookie 的 Web 站点或域。
2、session介绍
Session:与cookie功能效果相同。Session与Cookie的区别在于Session是记录在服务端的,而Cookie是记录在客户端的。
当访问服务器否个网页的时候,会在服务器端的内存里开辟一块内存,这块内存就叫做session,而这个内存是跟浏览器关联在一起的。这个浏览器指的是浏览器窗口,或者是浏览器的子窗口,意思就是,只允许当前这个session对应的浏览器访问,就算是在同一个机器上新启的浏览器也是无法访问的。而另外一个浏览器也需要记录session的话,就会再启一个属于自己的session。
一、cookie学习
1、设置cookie
在服务器设置cookie需要导入make_response包
response=make_response(‘hello world’) 括号这里传入的值是在客户端响应的内容
response.set_cookie(‘username’,‘mashibing’,max_age=3600) 第一个值是cookie名称,第二个值cookie内容,第三个值设置cookie的有效时间
这个有效时间在服务器没有关闭的状态下,有效时间内,即使你关闭了客户端(浏览器),再次打开客户端(浏览器)仍能访问到。
from flask import *
app=Flask(__name__)
#设置cookie以及有效性期
@app.route('/cookie')
def set_cookiei():
response=make_response('hello world')
response.set_cookie('username','mashibing',max_age=3600)
return response
#读取
@app.route('/get_cookie')
def get_cookie():
resp=request.cookies.get('username')
return resp
if __name__ == '__main__':
app.run()
2、客户端(浏览器)
二、session学习
1、设置SECRET_KEY
这里SECRET_KEY的值是可以随机设置,可以使用os.urandom(24) 随机生成24位字符
此值 [ SECRET_KEY 设置]是保护签名数据的关键 - 保持此安全至关重要,否则攻击者可以使用它来生成自己的签名值。
设置SECRET_KEY 配合加密算法生成sessionID
PERMANENT_SESSION_LIFETIME=timedelta(minutes=30) 设置该sessionID在服务器存储的时间,在有效时间内客户端(浏览器)关掉后再次重新访问时,会对其session ID进行校验,若是之前保存在服务器的session ID对应,则可以拿到之前session值。
class Df(object):
SECRET_KEY=os.urandom(24)
PERMANENT_SESSION_LIFETIME=timedelta(minutes=30)
2、设置session
这里设置session值在客户端是看不到的,相对安全,除非服务器崩了。
设置的session会保存在服务器。
session.permanent=True #这行代码也要写不然前面定义的时间失效。
设置session是以键值对的形式。
@app.route('/test1')
def test1():
session.permanent=True #这行代码也要写不然前面定义的时间失效
#设置session
session['un']='ywx'
session['pwd']='123456'
return 'hello ywx'
3、获取session值
通过session.get() 获取定义的值
#读取session
@app.route('/test2')
def test2():
un=session.get('un')
pwd=session.get('pwd')
print(un,pwd)
return '获取session的值'
4、整体代码展示
from flask import *
import os
from datetime import timedelta
app=Flask(__name__)
#设置SECRET_KEY
class Df(object):
SECRET_KEY=os.urandom(24)
PERMANENT_SESSION_LIFETIME=timedelta(minutes=30)
#导进来参数
app.config.from_object(Df)
@app.route('/test1')
def test1():
session.permanent=True #这行代码也要写不然前面定义的时间失效
#设置session
session['un']='ywx'
session['pwd']='123456'
return 'hello ywx'
#读取session
@app.route('/test2')
def test2():
un=session.get('un')
pwd=session.get('pwd')
print(un,pwd)
return '获取session的值'
if __name__ == '__main__':
app.run()
5、客户端(浏览器)展示
来源:https://blog.csdn.net/Ywx_csdn/article/details/127195470


猜你喜欢
- import wx import imagesclass DemoTaskBarIcon(wx.TaskBarIcon): &nb
- 有时候网站会收到一些投稿文章,或者也会转载别人的文章,新创建一个用户又有些麻烦,但在作者名称那里显示自己的名字,总不是那么和谐。今天倡萌推荐
- 某天,在需要抓取某个网页信息的时候,需要在header中增加一些信息,于是搜索了一下,如何在golang发起的http请求中设置header
- Oracle数据库开发应用中经常对数据库管理员有这样的需求,对比两个不同实例间某模式下对象的差异或者对比两个不同实例某模式下表定义的差异性,
- 本文实例讲述了Python基于正则表达式实现文件内容替换的方法。分享给大家供大家参考,具体如下:最近因为有一个项目需要从普通的服务器移植到S
- 先给大家快捷总结:文件格式Python库文本文件内置open函数CSV文件csvJSON文件jsonXML文件xml.etree.Eleme
- 本周的豆知识分享就来深入研究一下window.event对象。请先看看下边的代码片断。 <button id=”btn”&g
- 导入库和数据首先,我们需要导入PyTorch和PyG库,然后准备好我们的数据。例如,我们可以使用以下方式生成一个简单的随机数据集:from
- Saver的用法1. Saver的背景介绍我们经常在训练完一个模型之后希望保存训练的结果,这些结果指的是模型的参数,以便下次迭代的训练或者用
- 前言K-Means 聚类算法的目标是将 n 个样本划分(聚类)为 K 个簇,在博文《OpenCV与机器学习的碰撞》中,我们已经学习利用 Op
- 本文实例讲述了python实现数值积分的Simpson方法。分享给大家供大家参考。具体如下:#coding = utf-8#simpson
- eclipse 配置 python 默认头打开eclipse 点 窗口(Windows)->首选项(Preferences)Prefe
- 这是我对以前配置的基于vue-cli3搭建的前端H5模板的升级,主要把vue-cli3项目升级为vue-cli4,并删除一些过时插件。插件版
- 有很多时候,我们会在python的运行过程中得到一些重要的变量,比如一个数据量很庞大的dict。而且,后面的某些程序也会用到这个dict,那
- 要将深度学习更快且更便捷地应用于新的问题中,选择一款深度学习工具是必不可少的步骤。 TensorFlow是谷歌于2015年11月9日正式开源
- 示例:mysql> DELIMITER //mysql> CREATE PROCEDURE `statis`()
- 1、什么是偏函数partialpython中提供一种对于函数固定属性的函数 2、偏函数的作用把一个函数的某些参数给固定住(也就是设
- 本文实例分析了python删除指定类型(或非指定)的文件用法。分享给大家供大家参考。具体如下:如下,删除目录下非源码文件import os
- [数据恢复故障描述]一台重要的MYSQL数据库服务器,146GB*2,RAID1,约130GB DATA卷,存储了大约200~300个数据库
- 今天在验证接口的并发问题时,把之前通过 redis 解决的并发压力转移到 mysql 上(redis 在 set 保存数据和数据过期需要去向