Flask框架-cookie和session

发送HTTP请求时可以指定cookie,而在Web服务器端,一方面可以获取到客户端发送的cookie信息,另一方面还可以设置响应的cookie。Flask中获取请求cookie的方式与获取请求参数很相似,可以直接通过flask.request对象的cookies方法来获取

from flask import Flask,request
@app.route('/')
def index():
    request.cookies.get('username') # 获取cookie中的username字段
    return 'success'

为响应内容设置cookie也非常方便,所要做的就是在返回Flask响应对象之前,给响应对象设置指定的cookie值

from flask import make_response
@app.route('/')
def index():
    resp = make_response(render_template('test.html'))
    resp.set_cookie('username', 'python') # 设置响应cookie
        return resp

通过访问上述示例中的处理函数对应的URL,在响应内容中便可以获取到cookie名为username的字段,并且其值为python。cookie除了上述的常规用法之外,还被用于session的实现。session在Web服务中作为保存用户凭证及相关信息的数据存储载体,市场上大部分的Web服务都会把session的全部信息保存在Web服务器上,之后为其生成一个唯一的sessionID,并在返回响应时把sessionID设置为cookie字段传递给客户端,该客户端再次发出访问请求时会自动带上这个sessionID,而Web服务通过请求的sessionID信息就可以判断该请求是否曾经访问过。

Flask中的session实现机制与其他Web服务不同,它并没有把session保存在Web服务器端,而是把session的全部信息进行序列化之后再进行一次加密操作,最后把加密后的密文设置到响应cookie中。客户端下次请求时会自动带上加密后的cookie信息,Flask服务再次通过解密和反序列化操作来获取cookie信息

from flask import Flask, session, redirect, url_for, escape, request
app = Flask(__name__)
app.secret_key = b'_5#y2L"F4Q8z\n\xec]/'  # session 加密密钥
@app.route('/')
def index():
    if 'username' in session:
        return '登录名:%s' % escape(session['username'])
    return '登录失败'
@app.route('/login', methods=['GET'])
def login():
    session['username'] = request.args['username']
    return redirect(url_for('index'))

示例中定义了login和index两个接口,对应的URL分别为/login和/。在login中获取username参数值并设置为session的username值,之后把用户请求跳转至index接口;在index接口中通过获取session的username来确定当前请求的具体用户。在访问上述请求时,观察首次响应内容和第一次之后请求内容的cookie,会发现自动带上了一个名为session的cookie字段,其值为一串加密后的密文。该session字段就是前文提到的Flask实现 session的具体内容

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值