簡體   English   中英

在 Python Flask 中維護會話數據

[英]Maintaining session data in Python Flask

我有一個客戶端將 JSON 數據發送到服務器。 此 JSON 數據包含budgetepsilon值。 服務器接收數據並檢查used_budget是否為None或者換句話說,如果這是來自客戶端的第一個請求。 如果是,它used_budget初始化為 0.0。

條件是每次客戶端發送 JSON 負載時,將epsilon值添加到used_budget並將used_budgetbudget進行比較。 如果used_budget小於budget則服務器查詢數據庫並向客戶端返回一些結果,否則服務器應停止接受來自客戶端的請求。

問題:當我從客戶端發送初始請求時,會初始化一個新會話並添加epsilon 服務器按預期將結果返回給客戶端。 但是,當我從客戶端發送另一個請求時,服務器沒有將其視為同一個會話,而是初始化一個新會話,並將used_budget值再次設置為 0.0。 條件檢查永遠不會發生。

這是服務器端代碼:

class GetParams(Resource):
    def get(self):

    client_request = json.loads(list(dict(request.args).keys())[0])  # Stores the request in JSON format
    budget = client_request['budget']
    epsilon = client_request['epsilon']
    used_budget = session.get('used_budget')  # used_budget used a session variable

    # If Client sends the first request then initialize used_budget to 0.0
    if used_budget == None:
        set_used_budget()

    # Check if client has budget for sending queries for a session
    if (session['used_budget'] < float(budget)):
        session['used_budget'] = session.get('used_budget') + float(epsilon)
        result = write_file(client_request)  # Write request to file and store the returned query result
        print("used budget " + str(session['used_budget']))
        return result # Return the query result to the client
    else:
        error_message = "Budget exceeded - Cannot process queries"
        return error_message

api.add_resource(GetParams, '/data')  # Route for get()    
if __name__ == '__main__':
    app.run(port='5890', threaded=True)

這是客戶端代碼:

# Client sends this data in url
data = {
    'query': 'SELECT count(*) FROM accounts',
    'epsilon': '1.0',
    'budget': '2.0',
}

# Localhost url
url = 'http://127.0.0.1:5890/data'

# Client sends Get request
 session = requests.Session()    

resp= session.get(url, params=json.dumps(data))

# Client prints the data returned by the server in JSON
print(resp.json())

# Client prints the response code
print(resp)

當我從瀏覽器運行代碼時,該代碼工作正常(即,當我使用兩個不同的瀏覽器時,會話會得到維護),但是當我使用 IDE 從客戶端 ping 服務器時,會啟動一個新會話。 誰能告訴我我在這里做錯了什么?

發生這種情況是因為燒瓶會話的工作方式略有不同。 會話數據與響應一起傳遞給客戶端,並作為會話 cookie 存儲在客戶端上。 當您從瀏覽器發送請求時,瀏覽器會將會話 cookie 附加到新請求中。 當您使用 IDE 客戶端發出任何請求時,情況並非如此。 IDE 客戶端不維護任何會話 cookie,因此每次創建新會話時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM