在这个问题上几个小时以来我一直在井口撞击。我只是无法正确设置cookie。我设置的cookie似乎永远不会被保存或正确发回。
情况是cookie:
服务器“webapp”
客户端:Chrome浏览器,Javascript,jQuery,Ajax调用
使用以下ajax记录用户,这应该设置一个带有“令牌”的cookie:
$.ajax({
type: 'POST',
url: '/rest/login/',
data: JSON.stringify({username:username, password: password}),
error: function(jqXHR, status, errorThrown){...},
success: function(data, status, jqXHR){...}
});
这会产生以下标题larger pic:
服务器在谷歌应用引擎上运行webapp,这是它设置cookie的方式:
w_self.response.set_status(200)
# Put the token in the cookies. "str()" is used because without it, there is a unicode error
w_self.response.headers.add_header(str('Set-Cookie'), str('token=%s; max_age=360;' % token))
# The user
r_object['user'] = the_user
# Respond
w_self.response.out.write(json.dumps(r_object))
如果再次请求此页面,则会将cookie发送回服务器larger pic:
但似乎没有保存在任何地方,因为在开发人员工具larger pic中探索Cookie时我永远找不到它:
当请求资源的路径不完全相同时,也不会发送它('logout'而不是'login':
$.ajax({
type: 'POST',
url: '/rest/logout/',
data: JSON.stringify({something:'else'}),
error: function(jqXHR, status, errorThrown){...},
success: function(data, status, jqXHR){...}
});
这就是请求的样子:
答案 0 :(得分:1)
如果您没有设置路径,那么默认情况下只会将其发送回设置它的路径,如您所见。
我也认为它也意味着Max-Age而不是max_age,但是不管webapp2给你的响应对象有set_cookie method - 我相信它会完全正确
答案 1 :(得分:1)
我不确定为什么设置标头不起作用,也许您可以尝试使用set cookie方法:
# Saves a cookie in the client.
response.set_cookie('some_key', 'value', max_age=360, path='/',
domain='example.org', secure=True)
http://webapp-improved.appspot.com/guide/response.html#setting-cookies
以下是set_cookie
方法的来源: