Flask-cookie&session

关于cookie:

  • 原理: Cookie是由HTTP服务器设置的,保存在浏览器中,但HTTP协议是一种无状态协议,在数据交换完毕后,服务器端和客户端的链接就会关闭,每次交换数据都需要建立新的链接。cookie又叫会话跟踪机制,打开一次浏览器到关闭浏览器算是一次会话。
  • 区别: session机制采用的是在服务器端保持状态的方案,而cookie机制则是在客户端保持状态的方案。

一、创建cookie

1、如何设置cookie:

  • make_response(),resp.set_cookie设置cookie
  • max_age():设置有效期,单位为s
  • resp.headers:通过响应头来设置cookie
from flask import Flask, make_response
def set_cookie():
    """定义的视图函数"""
    resp = make_response("success")
    # 设置cookie,前为cookie名,后为cookie值,默认有效期是临时cookie,浏览器关闭失效
    resp.set_cookie("Itcast", "Python")
    # max_age设置有效期,单位为s
    resp.set_cookie("Itcast1", "Python1", max_age=3600)
    resp.headers["Set-Cookie"] = "Itcast3=Python3; Expires=Tue, 04-Feb-2020 11:39:45 GMT; Max-Age=3600; Path=/"
    return resp

2、如何查看新建cookie信息:

方法一:
在这里插入图片描述方法二:
在这里插入图片描述
通过设置响应头信息,来创建cookie
在这里插入图片描述

3、cookie有效期设置:

cookie到期时间默认为关闭浏览器失效
在这里插入图片描述 cookie中设置为1小时max_age=3600,到期时间为创建cookie后一小时失效。
在这里插入图片描述

4、创建cookie过程:

如何创建cookie呢?在响应头里,会增加一行Set-Cookie一行,从而创建cookie
在这里插入图片描述

二、获取cookie值:

from flask import Flask,  request
@app.route("/get_cookie")
def get_cookie():
    # 获取cookie值
    c = request.cookies.get("Itcast")
    return c

在这里插入图片描述

三、删除cookie

  • 删除cookie值,注意不是当时立即删除掉,而是将到期时间设置为创建时间,浏览器关闭后自动删除。
from flask import Flask, make_response
@app.route("/delete_cookie")
def delete_cookie():
    resp = make_response("del success")
    # 删除cookie
    resp.delete_cookie("Itcast1")
    return resp

在这里插入图片描述

四、完整代码:

from flask import Flask, make_response, request
app = Flask(__name__)


@app.route("/set_cookie")
def set_cookie():
    """定义的视图函数"""
    resp = make_response("success")
    # 设置cookie,前为cookie名,后为cookie值,默认有效期是临时cookie,浏览器关闭失效
    resp.set_cookie("Itcast", "Python")
    # max_age设置有效期,单位为s
    resp.set_cookie("Itcast1", "Python1", max_age=3600)
    resp.headers["Set-Cookie"] = "Itcast3=Python3; Expires=Tue, 04-Feb-2020 11:39:45 GMT; Max-Age=3600; Path=/"
    return resp


@app.route("/get_cookie")
def get_cookie():
    # 获取cookie值
    c = request.cookies.get("Itcast")
    return c


@app.route("/delete_cookie")
def delete_cookie():
    resp = make_response("del success")
    # 删除cookie
    resp.delete_cookie("Itcast1")
    return resp


if __name__ == '__main__':
    print(app.url_map)
    app.run()

关于session

更加深入学习可参考以下链接:
https://dormousehole.readthedocs.io/en/latest/
https://pythonhosted.org/Flask-Session/
此处前言及实现原理转自此链接,可跳转详细学习:

  • 前言

flask_session是flask框架实现session功能的一个插件,用来替代flask自带的session实现机制,flask默认的session信息保存在cookie中,不够安全和灵活。

session是用来干什么的呢?由于http协议是一个无状态的协议,也就是说同一个用户第一次请求和第二次请求是完全没有关系的,但是现在的网站基本上有登录使用的功能,这就要求必须实现有状态,而session机制实现的就是这个功能。

  • 实现的原理:

用户第一次请求后,将产生的状态信息保存在session中,这时可以把session当做一个容器,它保存了正在使用的所有用户的状态信息;这段状态信息分配了一个唯一的标识符用来标识用户的身份,将其保存在响应对象的cookie中;当第二次请求时,解析cookie中的标识符,拿到标识符后去session找到对应的用户的信息。

一:设置session数据:

用字典,键值的方式进行设置session数据。

from flask import Flask, session

# flask的session所需要用到的密钥字符串,防止从浏览器进行篡改数据
app.config["SECRET_KEY"] = "ksjjdljkjklsjkljlasil"

@app.route("/login")
def login():
    # 设置session数据
    session["name"] = "python"
    session["mobile"] = "15600000000"
    return "login succcess"

二:获取session数据:

用获取字典的方式获取session获取数据。

@app.route("/index")
def index():
    # 获取session数据
    name = session.get("name")
    return "hello %s" % name

三、session运行机制:

第一种:保存数据方式:将数据存放在cookie中,浏览器发出请求,在后端数据库中搜索数据,服务器返回session_id=1,浏览器接收后存入cookie。
第二种:在路径中存session数据,输入路径进行请求,存入数据库中,服务器通过redirect返回session_id,通过路径中设置session_i
在这里插入图片描述
在这里插入图片描述

四、session保存机制:

session数据除了可以保存在数据库中,还可以保存在Redis,文件,程序内存里。通过nginx进行分配访问多台服务器,减轻一台服务器处理数据的压力。
在这里插入图片描述
完整代码:

from flask import Flask, session
app = Flask(__name__)

# flask的session所需要用到的密钥字符串,防止从浏览器进行篡改数据
app.config["SECRET_KEY"] = "ksjjdljkjklsjkljlasil"

@app.route("/login")
def login():
    # 设置session数据
    session["name"] = "python"
    session["mobile"] = "15600000000"
    return "login succcess"


@app.route("/index")
def index():
    # 获取session数据
    name = session.get("name")
    return "hello %s" % name


if __name__ == '__main__':
    print(app.url_map)
    app.run()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值