文章目录
- 关于cookie:
- 一、创建cookie
- 1、如何设置cookie:
- 2、如何查看新建cookie信息:
- 3、cookie有效期设置:
- 4、创建cookie过程:
- 二、获取cookie值:
- 三、删除cookie
- 四、完整代码:
- 关于session
- 一:设置session数据:
- 二:获取session数据:
- 三、session运行机制:
- 四、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()