我遇到一个问题,我创建了一个托管在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的任何想法?
谢谢!
答案 0 :(得分:0)
首先,尝试改用Fetch API。如果您还必须支持旧的浏览器,请使用this poly-fill。设置cookie时,XMLHttpRequest的问题可能与未设置路径有关(这是如何工作的一些意外规则)。与其尝试使用旧的API进行修复,不如使用更好的Fetch API并阅读此about setting cookies。