一、Cookie的使用
1、什么是Cookie
我们都知道,HTTP
协议是无状态的,也就是说,在一次请求响应结束后,服务端不会保留任何对方状态的信息,对于某些需要保留的信息,可以通过 Cookie
技术来完成,通过在请求和响应报文中添加 Cookie
数据来保存客户端的状态信息。
Web 服务器为了存储某些数据(比如用户信息) 而保存在浏览器上的小型文本数据,浏览器会在一定时间内保存它,在下次向该服务器发送请求时附带这些数据,Cookie
通常被用来进行用户会话管理(比如用户的登录状态),保存用户的一些信息。
2、在Flask中使用Cookie
在 Flask
中,如果想要在响应中添加一个 cookie
,可以使用 response
对象的set_cookie()
方法。
set_ cookie()方法的参数如下:
-
key
:cookie
键名 -
value
:cookie
值 -
max_age
:cookie
被保存的时间,单位:秒 -
expires
:具体的过期时间 -
path:限制
cookie
可用的路径,默认为整个域名 -
domain
:cookie
可用的域名 -
secure
:设置为True
,只有通过 HTTPS 才可使用 -
httponly
:设置为True
,禁止客户端 js 获取cookie
具体使用如下:
1
2
3
4
5
6
7
8
9
|
@app .route( 'user/<name>' ) def user(name): response = make_response( 'hello {}' . format (name), 200 ) response.set_cookie( "name" , name) return response |
在 Flask
中,Cookie
可以通过 request
请求对象 cookies
属性获取。
1
2
3
4
5
6
7
8
9
10
11
|
@app .route( '/hello' ) def hello(): user = request.args.get( 'name' ) if not user: user = request.cookies.get( "name" , 'default' ) return 'Hello {}!' . format (user) |
二、session的使用
1、什么是session
session
指用户会话,会话可以用来保存当前请求的一些状态,以便于在请求之前共享信息。session是存储在服务端的,通过唯一标识区分用户 session,即 session id
,一般情况下,session id
是存在 Cookie
中的,服务端可以获取 Cookie
中的 session id
来获取用户 session
。
2、Flask中的session对象
我们了解了 Cookie
最重要的功能是用来保存客户端用户的状态信息。但是存在这样一个问题,Cookie 是保存在客户端的,在浏览器中可以轻易的添加和修改 Cookie
,而且如果把用户的状态信息以明文的方式存储在 Cookie
里的话,那么就可以通过伪造 Cookie 信息来伪造别人的用户信息,从而获取一些权限。为了避免这个问题,我们要对敏感的 Cookie 内容进行加密。Flask 提供了 session
对象就是用来将 Cookie 数据加密存储的。
3、在Flask中使用session
session
需要通过密钥对数据进行签名以加密数据,因此,需要先设置一个密钥app.secret_key
,这里设置的密钥只是一个简单示例,在生产环境中,必须要随机生成的密钥,保证秘钥的复杂度度和随机性,才更安全。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
# 设置密钥 app.secret_key = 'qwertyuiop' @app .route( '/user' , methods = [ 'POST' , 'GET' ]) def user(): if request.method = = 'POST' : user = request.form[ 'user_name' ] session[ 'user_name' ] = request.form[ 'user_name' ] return 'Hello {}!' . format (user) else : if 'user_name' in session: return 'Hello {}!' . format (session[ "user_name" ]) |
session
对象的使用就跟字典一样,如上,用户使用POST请求登录后,在 session
中保存用户名,下次再使用GET请求时,不传递任何信息,也可以在 session
中获取该用户的信息。
想要清除 session 指定信息的话,例如用户名,可以使用 session.pop("user_name", None)
,清除全部的话可以使用session.clear()
。
到此这篇关于 Flask 入门系列 Cookie与session
的介绍的文章就介绍到这了,更多相关 Flask Cookie与session内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://juejin.cn/post/7030627770677854245