当前位置: 首页>编程语言>正文

flask伪造session flask session机制


文章目录

  • 关于cookie:
  • 一、创建cookie
  • 1、如何设置cookie:
  • 2、如何查看新建cookie信息:
  • 3、cookie有效期设置:
  • 4、创建cookie过程:
  • 二、获取cookie值:
  • 三、删除cookie
  • 四、完整代码:
  • 关于session
  • 一:设置session数据:
  • 二:获取session数据:
  • 三、session运行机制:
  • 四、session保存机制:


关于cookie:

  • 原理: Cookie是由HTTP服务器设置的,保存在浏览器中,但HTTP协议是一种无状态协议,在数据交换完毕后,服务器端和客户端的链接就会关闭,每次交换数据都需要建立新的链接。cookie又叫会话跟踪机制,打开一次浏览器到关闭浏览器算是一次会话。
  • 区别: session机制采用的是在服务器端保持状态的方案,而cookie机制则是在客户端保持状态的方案。

一、创建cookie

1、如何设置cookie:

  • make_response(),resp.set_cookie设置cookie
  • max_age():设置有效期,单位为s
  • resp.headers:通过响应头来设置cookie
from flask import Flask, make_response
def set_cookie():
    """定义的视图函数"""
    resp = make_response("success")
    # 设置cookie,前为cookie名,后为cookie值,默认有效期是临时cookie,浏览器关闭失效
    resp.set_cookie("Itcast", "Python")
    # max_age设置有效期,单位为s
    resp.set_cookie("Itcast1", "Python1", max_age=3600)
    resp.headers["Set-Cookie"] = "Itcast3=Python3; Expires=Tue, 04-Feb-2020 11:39:45 GMT; Max-Age=3600; Path=/"
    return resp

2、如何查看新建cookie信息:

方法一:

flask伪造session flask session机制,flask伪造session flask session机制_flask,第1张

方法二:

flask伪造session flask session机制,flask伪造session flask session机制_flask伪造session_02,第2张

通过设置响应头信息,来创建cookie

flask伪造session flask session机制,flask伪造session flask session机制_flask伪造session_03,第3张

3、cookie有效期设置:

cookie到期时间默认为关闭浏览器失效

flask伪造session flask session机制,flask伪造session flask session机制_服务器_04,第4张

cookie中设置为1小时max_age=3600,到期时间为创建cookie后一小时失效。

flask伪造session flask session机制,flask伪造session flask session机制_flask伪造session_05,第5张

4、创建cookie过程:

如何创建cookie呢?在响应头里,会增加一行Set-Cookie一行,从而创建cookie

flask伪造session flask session机制,flask伪造session flask session机制_服务器_06,第6张

二、获取cookie值:

from flask import Flask,  request
@app.route("/get_cookie")
def get_cookie():
    # 获取cookie值
    c = request.cookies.get("Itcast")
    return c

flask伪造session flask session机制,flask伪造session flask session机制_flask伪造session_07,第7张

三、删除cookie

  • 删除cookie值,注意不是当时立即删除掉,而是将到期时间设置为创建时间,浏览器关闭后自动删除。
from flask import Flask, make_response
@app.route("/delete_cookie")
def delete_cookie():
    resp = make_response("del success")
    # 删除cookie
    resp.delete_cookie("Itcast1")
    return resp

flask伪造session flask session机制,flask伪造session flask session机制_flask伪造session_08,第8张

四、完整代码:

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


@app.route("/set_cookie")
def set_cookie():
    """定义的视图函数"""
    resp = make_response("success")
    # 设置cookie,前为cookie名,后为cookie值,默认有效期是临时cookie,浏览器关闭失效
    resp.set_cookie("Itcast", "Python")
    # max_age设置有效期,单位为s
    resp.set_cookie("Itcast1", "Python1", max_age=3600)
    resp.headers["Set-Cookie"] = "Itcast3=Python3; Expires=Tue, 04-Feb-2020 11:39:45 GMT; Max-Age=3600; Path=/"
    return resp


@app.route("/get_cookie")
def get_cookie():
    # 获取cookie值
    c = request.cookies.get("Itcast")
    return c


@app.route("/delete_cookie")
def delete_cookie():
    resp = make_response("del success")
    # 删除cookie
    resp.delete_cookie("Itcast1")
    return resp


if __name__ == '__main__':
    print(app.url_map)
    app.run()

关于session

更加深入学习可参考以下链接:
https://dormousehole.readthedocs.io/en/latest/ https://pythonhosted.org/Flask-Session/此处前言及实现原理转自此链接,可跳转详细学习:

  • 前言

flask_session是flask框架实现session功能的一个插件,用来替代flask自带的session实现机制,flask默认的session信息保存在cookie中,不够安全和灵活。

session是用来干什么的呢?由于http协议是一个无状态的协议,也就是说同一个用户第一次请求和第二次请求是完全没有关系的,但是现在的网站基本上有登录使用的功能,这就要求必须实现有状态,而session机制实现的就是这个功能。

  • 实现的原理:

用户第一次请求后,将产生的状态信息保存在session中,这时可以把session当做一个容器,它保存了正在使用的所有用户的状态信息;这段状态信息分配了一个唯一的标识符用来标识用户的身份,将其保存在响应对象的cookie中;当第二次请求时,解析cookie中的标识符,拿到标识符后去session找到对应的用户的信息。

一:设置session数据:

用字典,键值的方式进行设置session数据。

from flask import Flask, session

# flask的session所需要用到的密钥字符串,防止从浏览器进行篡改数据
app.config["SECRET_KEY"] = "ksjjdljkjklsjkljlasil"

@app.route("/login")
def login():
    # 设置session数据
    session["name"] = "python"
    session["mobile"] = "15600000000"
    return "login succcess"

二:获取session数据:

用获取字典的方式获取session获取数据。

@app.route("/index")
def index():
    # 获取session数据
    name = session.get("name")
    return "hello %s" % name

三、session运行机制:

第一种:保存数据方式:将数据存放在cookie中,浏览器发出请求,在后端数据库中搜索数据,服务器返回session_id=1,浏览器接收后存入cookie。

第二种:在路径中存session数据,输入路径进行请求,存入数据库中,服务器通过redirect返回session_id,通过路径中设置session_i

flask伪造session flask session机制,flask伪造session flask session机制_数据_09,第9张

flask伪造session flask session机制,flask伪造session flask session机制_flask_10,第10张

四、session保存机制:

session数据除了可以保存在数据库中,还可以保存在Redis,文件,程序内存里。通过nginx进行分配访问多台服务器,减轻一台服务器处理数据的压力。

flask伪造session flask session机制,flask伪造session flask session机制_flask伪造session_11,第11张

完整代码:

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

# flask的session所需要用到的密钥字符串,防止从浏览器进行篡改数据
app.config["SECRET_KEY"] = "ksjjdljkjklsjkljlasil"

@app.route("/login")
def login():
    # 设置session数据
    session["name"] = "python"
    session["mobile"] = "15600000000"
    return "login succcess"


@app.route("/index")
def index():
    # 获取session数据
    name = session.get("name")
    return "hello %s" % name


if __name__ == '__main__':
    print(app.url_map)
    app.run()



https://www.xamrdz.com/lan/53a1959811.html

相关文章: