浅谈Flask中的cookie与session

前言: cookie与session都是常用的会话技术,其目的都是为了解决短连接不同请求间的传值问题。不同的是,cookie的数据由客户端(即浏览器)负责存储管理,而session由服务端管理。下面对两种技术分别进行介绍。

一、cookie

上面说到,cookie是存储在客户端的,那这存储的数据从何而来呢?答案是从服务器来的,即在一次正确的请求响应后,服务器返回一个响应对象,其中就设置了cookie。
cookie设置
了解了cookie的设置原理,那在python中如何实现呢?这在flask中十分简单,往下看:

  • 设置cookie
from flask import Flask, Response

app = Flask(__name__)

@app.route('/set-cookie')
def set_cookie():
    resp = Response(response='设置cookie') #实例化返回对象
    resp.set_cookie('name','cookie',expires=None) #设置cookie
    return resp

注:

  1. expires参数设置cookie的过期时间,以秒为单位,或直接指定具体日期。为None时表示永不过期。
  2. flask中cookie支持中文值(通过先编码,后解码实现)
  3. cookie不可跨域名和浏览器!
  • 获取cookie
from flask import Flask, request

app = Flask(__name__)

@app.route('/get-cookie')
def get_cookie():
    name = request.cookies.get('name') #根据键名获取cookie值
    return '刚才设置的cookie值为%s'%name
  • 删除cookie
@app.route('/delete-cookie')
def delete_cookie():
    resp = redirect(url_for('login')) #实例化响应对象,转移到其他页面
    resp.delete_cookie('name') #根据键名删除
    return resp

二、session

在flask中,使用session时,有两点需要注意:

  1. 基于安全考虑,得先设置一个变量值 SECRET_KEY = ‘xxx’,这个值可以自由定义,但不要过于简单!
  2. 自带的session依赖于cookie存在,创建后,加密后的session id会被存到cookie中,数据存到内存中。

注:session的本质是一个字典,所以其操作与一般字典操作相同,使用方法如下:

  • 存储数据
from flask import Flask,session

app = Flask(__name__)

app.config['SECRET_KEY'] = 'sldfjlglgjoek434l3lkj9798'   #设置SECRET_KEY

@app.route('/session-save')
def session_save():
    session['username'] = 'session' #存储数据
    return 'session存储成功'

结果如下:
session存储

  • 取数据
@app.route('/session-get')
def session_get():
    username = session.get('username')  #取数据
    return '欢迎你:%s'%username
  • 删除数据
@app.route('/session-delete')
def session_delete():
    session.pop('username')
    return 'username删除成功'
三、总结

 在flask中,cookie与session的操作相对简单,但原生的session存储方式单一,且风险较大。
解决办法:使用flask-session插件,用 redis 进行缓存或其他方式存储。具体使用:请查看flask-session使用手册

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值