如何在App Engine上用Python删除用户的cookie?

7 投票
1 回答
5092 浏览
提问于 2025-04-16 22:26

我在谷歌应用引擎上使用Python的Facebook API,想要在用户退出应用时让他们的cookie过期。这个cookie是通过JavaScript的Facebook API设置的。

下面是一个Facebook API的函数,展示了Facebook API是如何访问这个cookie的:

def get_user_from_cookie(cookies, app_id, app_secret):
    cookie = cookies.get("fbs_" + app_id, "")
    if not cookie: return None
    args = dict((k, v[-1]) for k, v in cgi.parse_qs(cookie.strip('"')).items())
    payload = "".join(k + "=" + args[k] for k in sorted(args.keys())
                      if k != "sig")
    sig = hashlib.md5(payload + app_secret).hexdigest()
    expires = int(args["expires"])
    if sig == args.get("sig") and (expires == 0 or time.time() < expires):
        return args
    else:
        return None

我可以通过以下方式调用这个函数:

class WelcomePage(webapp.RequestHandler):
    def getFacebookCookie(self):
        cookie = facebook.get_user_from_cookie(
                              self.request.cookies, app_id, app_secret)
        accss_token = cookie["access_token"]
        logging.debug("The access token is %s"%access_token)

那么,我该如何删除或设置用户的cookie让它过期呢?

非常感谢任何帮助。提前谢谢大家。

1 个回答

5

更新:这个方法适用于你自己设置的cookie……但我忽略了你明确提到的是想要删除Facebook的cookie。在这种情况下,针对这个问题的答案似乎正是你需要的:Facebook Oauth 登出

如果是你自己最开始设置的cookie,你可以在响应头中将这个cookie的过期时间设置得很久以前。维基百科文章

self.response.headers.add_header("Set-Cookie", "access_token=deleted; Expires=Thu, 01-Jan-1970 00:00:00 GMT")

确保设置的域名和路径与原来的cookie相同,否则可能无法生效。

撰写回答