Flask学习笔记---状态保持

HTTP状态保持详解
本文详细介绍了HTTP协议中的状态保持机制,包括通过cookie和session实现的方式。讲解了如何设置、获取和删除cookie,以及使用session所需的配置步骤。同时探讨了session在实际应用中可能遇到的问题及其解决方案。

Http是一种无状态协议,若要实现状态保持,可以通过两种方式:cookie 和 session

1.设置cookie,本质上就是设置响应头上的值而已,所以有两种方式:

@app.route("/")
def demo1():
    response = make_response(u"创造一个响应")
    response.set_cookie("name","heima")---------------------------第1种方式
    response.set_cookie("age","18",max_age = 3600)-----------------------也可设置过期时间,单位是秒
    response.headers["Set-Cookie"] = "gender=11; Expires=Thu, 30-Nov-2017 13:43:32 GMT; Max-Age=3600; Path=/"-----------------------第2种方式
    return response

2.获取cookie

@app.route("/get_cookie")
def demo2():
    age = request.cookies.get("age")
    return "cookie %s" % age

3.删除cookie---逻辑删除,并非真正意义上的删除,只是设置过期时间为创建时间。

@app.route("/delete_cookie")
def demo3():
    response = make_response("delete success")
    response.delete_cookie("age")
    return response

1.设置session必须设置secret_key

@app.route("/set_session")
def demo4():
    session["user_id"] = "18"
    return "set success"

RuntimeError: the session is unavailable because no secret key was set.  Set the secret_key on the application to something unique and secret.

app.secret_key = "aaa" 点击进去:

#: If a secret key is set, cryptographic components can use this to
   
     #: sign cookies and other things.  Set this to a complex random value
   
     #: when you want to use the secure cookie for instance.

检查:Set-Cookie:session=eyJ1c2VyX2lkIjp7IiBiIjoiTVRnPSJ9fQ.DQKgzg.P7z3XyoYpibeyAx3poMbszf7caI; HttpOnly; Path=/

一般情况下,secret_key设置越复杂越好,否则会被反解出来的,我们可以通过:操作终端进行加密

import os

os.urandom(48)

u=os.urandom(48)

import base64

base64.b64encode(u)

Out[6]: 'fet//U1RWo7LDdGLFsNVLGY5FA7iBgzSJyz1xx9K4iPhyjPwYI34RPqCs6zJ+SM5'

secret_key= 'fet//U1RWo7LDdGLFsNVLGY5FA7iBgzSJyz1xx9K4iPhyjPwYI34RPqCs6zJ+SM5'

2.获取session

@app.route("/get_session")
def demo5():
    user_id = session.get("user_id")
    return "session %s" % user_id

3.session扩展机制:

问题:

(1)当浏览器不支持cookie保存肿么办?思路:如何解决问题以及解决问题以后还会出现的问题。可以把session保存在url当中,但是下次访问时候,依然还是要全部输入sid;

(2)后端如何判断客户端是否可以保存cookie?思路:设置session,如果取不到说明不能保存或者cookie关闭;

(3)现在session一般保存在Mysql或者Redis数据库中,因为访问多个服务器时候会很麻烦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值