从webapp设置cookie。只是不会工作

时间:2012-08-31 22:17:31

标签: javascript ajax google-app-engine web-applications cookies

在这个问题上几个小时以来我一直在井口撞击。我只是无法正确设置cookie。我设置的cookie似乎永远不会被保存或正确发回。

情况是cookie:

  • 发送完全相同的请求时会收到回复,
  • 发送具有不同路径的请求时不会发回。
  • 重新启动浏览器时似乎不存在
  • 未显示在Chrome开发者工具“资源”区域中。
“google app engine”上的

服务器“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

enter image description here

服务器在谷歌应用引擎上运行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

enter image description here

但似乎没有保存在任何地方,因为在开发人员工具larger pic中探索Cookie时我永远找不到它:

enter image description here

当请求资源的路径不完全相同时,也不会发送它('logout'而不是'login':

$.ajax({
    type:   'POST',
    url:    '/rest/logout/',
    data: JSON.stringify({something:'else'}),
    error: function(jqXHR, status, errorThrown){...},
    success: function(data, status, jqXHR){...}
});

这就是请求的样子:

larger pic

enter image description here

2 个答案:

答案 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方法的来源:

http://code.google.com/p/googleappengine/source/browse/trunk/python/lib/webob_1_1_1/webob/response.py#616