溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Flask框架中的session怎么設(shè)置

發(fā)布時(shí)間:2023-02-23 14:35:32 來源:億速云 閱讀:94 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹了Flask框架中的session怎么設(shè)置的相關(guān)知識,內(nèi)容詳細(xì)易懂,操作簡單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇Flask框架中的session怎么設(shè)置文章都會有所收獲,下面我們一起來看看吧。

    Flask中的session

    session設(shè)置

    Flask除請求對象之外,還有一個(gè) session 對象。

    它允許你在不同請求間存儲特定用戶的信息。它是在 Cookies 的基礎(chǔ)上實(shí)現(xiàn)的,并且對 Cookies 進(jìn)行密鑰簽名要使用會話,你需要設(shè)置一個(gè)密鑰。

    我們知道,在django中的session是存儲在服務(wù)器中的數(shù)據(jù)庫中的,也就是django_session表中,而flask中的session是交由客戶端保管的,也就是存儲在本地的cookie中。

    session的方法:

    • session['username'] = 'stzz';設(shè)置session

    • session.pop("username",None);刪除session

    關(guān)于session的設(shè)置

    app.session_cookie_name = "I am not Session"

    其他配置

    'SESSION_COOKIE_NAME':                  'session',  # 設(shè)置session的名字
    'SESSION_COOKIE_DOMAIN':                None,
    'SESSION_COOKIE_PATH':                  None,
    'SESSION_COOKIE_HTTPONLY':              True,
    'SESSION_COOKIE_SECURE':                False,
    'SESSION_REFRESH_EACH_REQUEST':         True,  # 是否每次都跟新
    'PERMANENT_SESSION_LIFETIME':           timedelta(days=31)  
    # 設(shè)置session的過期時(shí)間

    cookies中的session

    cookies 中 session 存儲的是通過 secret_key 加密后的 key , 通過這個(gè) key 從flask程序的內(nèi)存中找到用戶對應(yīng)的session信息

    session序列化機(jī)制

    當(dāng)我們開啟session時(shí),設(shè)置session["username"]="stzz",flask會幫我們創(chuàng)建一個(gè)字典{"username":"stzz"},然后通過secret_key + 時(shí)間戳 + 簽名經(jīng)過加密生成一個(gè)字符串。

    session反序列化機(jī)制

    當(dāng)客戶端發(fā)送請求時(shí),request請求會帶上cookie,也就是session中的數(shù)據(jù)存儲在其中,這個(gè)數(shù)據(jù)就是之前加密后的字符串,發(fā)送到后端后,flask會通過secret_key去解密session中的加密字符串,從而獲取{"username":"stzz"}從而來驗(yàn)證是否登錄。

    session的使用和驗(yàn)證

    from flask.blueprints import Blueprint
    from flask import Response, session
    from flask_restful import fields, marshal
    from flask_sqlalchemy.query import Query
    from sqlalchemy import or_, and_
    from ..model.UserModel import User
    import json
    user_bp = Blueprint("user", __name__, url_prefix="/user")
    user_fields = {
        "id": fields.Integer,
        "username": fields.String,
        "password": fields.String,
        "age": fields.Integer
    }
    @user_bp.route("/hello")
    def hello():
        result = User.query.filter(or_(User.username.startswith("王"), and_(User.username == "王天祥", User.age > 21)))
        return marshal(result.all(), fields=user_fields)
    @user_bp.route("/setSession", methods=["GET", "POST"])
    def setSession():
        session["name"] = "STZZ"
        return "設(shè)置session成功?。。?quot;
    @user_bp.route("/getSession")
    def getSession():
        username = session.get("name")
        if username:
            return username
        else:
            return "用戶未登錄!!!"

    關(guān)于“Flask框架中的session怎么設(shè)置”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“Flask框架中的session怎么設(shè)置”知識都有一定的了解,大家如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI