2015-09-04 93 views
1

這是一個晦澀難懂的問題,我相信我正在尋找一些東西。我運行的Flask應用程序使用flask.session在用戶會話中存儲了非常基本的字符串。flask.session在所有連接中共享

服務器設置爲通過Nginx -> uwsgi (emperor mode) -> Flask application

下面是一個裝飾我關於請求某些@app.route()包裹函數使用,所以這樣我可以驗證該信息是在會話:

def verify(method): 
    @wraps(method) 
    def wrapper(*args, **kwargs): 
     data = flask.request.get_json() or flask.request.form or flask.request.args 
     if 'name' in flask.session: 
      return method(*args, **kwargs) 
     elif data.get("name"): 
      if is_user(data.get("name")): 
       flask.session['name'] = data.get("name") 
       return method(*args, **kwargs) 
      return flask.jsonify(success=False, message='Incorrect information supplied.') 
     else: 
      return flask.jsonify(success=False, message='Not all information supplied.') 
    return wrapper 

我正在利用以上的示例方式,以及訪問會話:

@app.route('/api/user') 
@verify 
def api_route(): 
    # .. misc code here .. 
    return flask.jsonify(success=True, user=flask.session['name']) 

現在..可以說我使用Chrome訪問,並確保會話設置。現在,我去一些隨機的服務器,捲曲特定的API端點,它的拉動會話我的瀏覽器份額:

[~]$ curl -4s https://domain.com/api/user 
{ 
    "success": true, 
    "user": "liam" 
} 

我相信這可能是由於Nginx的和/或uwsgi,但我不確定。我對Nginx和其他各種網站使用了相同的配置,我從來沒有見過這樣的問題。

以前看過嗎?我還有另外一種方式與會議合作嗎?我可以提供的任何其他信息指向正確的位置?

編輯

我不Nginx的和uwsgi測試這和問題仍然存在。沒有任何中間人扮演的角色。

回答

1

因此,它看起來像我找到了解決方案。此外,在我的代碼,而不是上面提到的,我有以下幾點:

@app.route('/unset') 
def unset_user(): 
    flask.session = {} 
    return flask.jsonify(success=True) 

看起來,當您設置flask.session到字典不過,出現這種情況。我應該一直在使用flask.session.clear()

現在測試它,一切看起來很棒。好極了!