Flask学习之 会话控制

会话控制

所谓的会话,就是用户和浏览器中网站之间一次交互过程.

会话的开始是在用户打开浏览器以后第一次访问网站.

会话的结束时在用户关闭浏览器以后.

因为 http 是一种无状态协议,浏览器请求服务器是无状态的。

无状态:指一次用户请求时,浏览器、服务器无法知道之前这个用户做过什么,每次请求都是一次新的请求。

无状态原因:浏览器与服务器是使用 socket 套接字进行通信的,服务器将请求结果返回给浏览器之后,会关闭当前的 socket 连接,而且服务器也会在处理页面完毕之后销毁页面对象。

有时需要保持下来用户浏览的状态,比如用户是否登录过,浏览过哪些商品等

实现状态保持主要有两种方式:

在客户端存储信息使用`Cookie,本地存储,token[jwt,oauth]`

在服务器端存储信息使用`Session`,redis

一.Cookie

Cookie是由服务器端生成,发送给客户端浏览器,浏览器会将Cookiekey/value保存,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。Cookiekey/value可以由服务器端自己定义。

使用场景: 登录状态, 浏览历史, 网站足迹,购物车 [不登录也可以使用购物车]

Cookie是存储在浏览器中的一段纯文本信息,建议不要存储敏感信息如密码,因为电脑上的浏览器可能被其它人使用

Cookie基于域名安全,不同域名的Cookie是不能互相访问的

如访问baidu.com时向浏览器中写了Cookie信息,使用同一浏览器访问souhu.com时,无法访问到baidu.com写的Cookie信息

浏览器的同源策略针对cookie也有限制作用.

当浏览器请求某网站时,会将本网站下所有Cookie信息提交给服务器,所以在request中可以读取Cookie信息。

1.设置cookie

设置cookie需要通过flaskResponse响应对象来进行设置,flask内部提供了一个make_response函数给我们可以快速创建响应对象

from flask import Flask, make_response
app = Flask(__name__)


@app.route("/set_cookie")
def cookie_demo():
    response = make_response("make a cookie")
    # response.set_cookie("变量名", "变量值", max_age="有效期几秒")
    response.set_cookie("username", "zero", max_age=20)
    return response

if __name__ == '__main__':
    app.run(port=5000, host='0.0.0.0', debug=True)

2.获取cookie

from flask import Flask
from flask import request
app = Flask(__name__)




@app.route('/get_cookie')
def resp_cookie():
    resp = request.cookies.get('username')
    return resp

if __name__ == '__main__':
    app.run(port=5000, host='0.0.0.0', debug=True)

如果没有先生产cookie,直接获取会报错。

二.Session

对于敏感、重要的信息,建议要存储在服务器端,不能存储在浏览器中,如用户名、余额、等级、验证码等信息

在服务器端进行状态保持的方案就是`Session`

注意: **Session依赖于Cookie**,而且flask中使用session,需要配置SECRET_KEY选项,否则报错.

1.设置session

from flask import Flask
from flask import session

app = Flask(__name__)


# 声明一个配置类
class Config(object):
    SECRET_KEY = "DD434O7HQ2131!@#edn#hu!@!g@uWO1NS"


# 加载配置
app.config.from_object(Config)


@app.route('/set_session')
def set_session():
    session['username'] = 'one'
    return 'set session ok!'


@app.route('/get_session')
def get_session():
    return session.get('username')


if __name__ == '__main__':
    app.run(port=5000, host='127.0.0.1', debug=True)

2.获取session

删除一个session设置值为None,修改一个session重新赋值即可。

原文地址:https://www.cnblogs.com/hszstudypy/p/13288659.html