如何从Flask Web服务器设置cookie

时间:2018-12-24 23:11:17

标签: javascript google-chrome cookies flask xmlhttprequest

我遇到一个问题,我创建了一个托管在Heroku上的Flask网络服务器,其中包括一个在Chrome中存储Cookie的功能。

用于存储cookie的功能如下:

@app.route('/api/v1.0/setcookie', methods=['GET'])
def setcookie():
    series = str(np.random.randint(10**8, 10**9))
    token = str(np.random.randint(10**8, 10**9)).encode('utf-8')
    hashed_token = hashlib.sha256(token).hexdigest()
    resp = make_response()
    resp.set_cookie('huga_series_id', series, max_age=60*60*24*365*5)
    resp.set_cookie('huga_series_token', token, max_age=60*60*24*365*5)
    cookies = mongo.db.cookies
    cookies.insert({'series': series, 
        'token': hashed_token})
    return resp

此功能是Flask Web服务器的一部分,该服务器托管在URL https://my-server-name.herokuapp.com/上。

这是问题所在:当我访问URL https://my-server-name.herokuapp.com/api/v1.0/setcookie时,cookie正确存储在Chrome浏览器中。但是,如果我尝试使用XMLHTTTPREQUEST从Javascript向此URL提交GET请求,如下所示:

    var xxhttp = new XMLHttpRequest();
    xxhttp.open("GET", "https://my-server-name.herokuapp.com//api/v1.0/setcookie", true);
    xxhttp.send();

不存储任何cookie。我已经完成了测试,并且我对XMLHttpRequest发送,Python代码等所有工作都充满信心。这两种方法之间的唯一区别是,我使用一种方法通过Javascript提交GET请求,而使用另一种方法手动访问URL。

关于如何使用XMLHttpRequest在Chrome中存储cookie的任何想法?

谢谢!

1 个答案:

答案 0 :(得分:0)

首先,尝试改用Fetch API。如果您还必须支持旧的浏览器,请使用this poly-fill。设置cookie时,XMLHttpRequest的问题可能与未设置路径有关(这是如何工作的一些意外规则)。与其尝试使用旧的API进行修复,不如使用更好的Fetch API并阅读此about setting cookies