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

来源:互联网 发布:手机淘宝修改退款金额 编辑:程序博客网 时间:2024/06/15 14:22

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数据库中,因为访问多个服务器时候会很麻烦。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 5岁儿童感冒鼻塞怎么办 3岁宝宝感冒鼻塞怎么办 宝宝9个月流鼻涕怎么办 鼻涕又黄又粘稠怎么办 鼻子一直流黄水怎么办 宝宝眼屎多又黄怎么办 宝宝痰多鼻涕多怎么办 小孩痰多鼻涕多怎么办 用qq登不了微博怎么办 中国银行u盾丢了怎么办 我的世界遇见him怎么办 考军校年龄超了怎么办 dnf组队就红电脑怎么办 九阳高压锅漏气怎么办 晋江买了防盗章怎么办 开车撞了人应该怎么办 开车撞了人没钱怎么办 驾照扣分12分后怎么办 车被交警拖走了怎么办 符石耐久没了怎么办 冒险岛2老是掉线怎么办 冒险岛老是掉线怎么办 冒险岛2延迟高怎么办 高速超速扣6分怎么办 优酷视频有密码怎么办 斗鱼直播很卡怎么办 鼠标的滑轮坏了怎么办 宝马1系烧机油怎么办 原房主不迁户口怎么办 做假账被发现了怎么办 裆部潮湿有异味怎么办 用了开塞露还是拉不出大便怎么办 安卓模拟器很卡怎么办 锁屏图案忘了怎么办 手机图案锁忘了怎么办 炸东西油变黑了怎么办 自热米饭吃完后怎么办 无线网密码忘了怎么办 普通税票开错了怎么办 发票购买本丢了怎么办 当兵的体能太差怎么办