【问题标题】:GAE Python - Saving database query into cookieGAE Python - 将数据库查询保存到 cookie
【发布时间】:2013-02-24 23:10:03
【问题描述】:

我正在尝试将数据库查询保存到 cookie 中,因为我需要每个页面上的结果。当将到期日期硬编码到代码中时,一切正常,但是当我用动态“第二天”到期替换硬编码日期时,它给了我以下错误:

self.response.headers.add_header(str('Set-Cookie'), str('shops=%s; path=/; expires=%s') % shoplist expire_string)
                                                                                                               ^
SyntaxError: invalid syntax

我也尝试使用 response.set_cookie 方法,但这根本不起作用,这就是我决定使用以下代码的原因:

class CookieHandler(webapp2.RequestHandler):
    def get(self):
        shoplist = Shop.all().filter('active = ', True).order('abbrev')
        expire_date = datetime.datetime.now() + datetime.timedelta(days=1)
        expire_string = expire_date.strftime('%a, %d %b %Y %H:%M:%S GMT')
        self.response.headers.add_header(str('Set-Cookie'), str('shops=%s; path=/; expires=%s') % shoplist expire_string)

更新 提供有关内容的更多信息 - 它是对数据库中所有商店名称的查询。该查询用于在每个页面上可见的搜索框上的自动完成功能。

【问题讨论】:

  • 您确实意识到有人可以修改 cookie 并完全控制您的数据库,对吧?
  • 真的吗?结果仅用于填充自动完成功能,然后无论如何都必须重新查询数据库。我不知道那里有这样的风险。这将如何运作?
  • 不让浏览器在每次加载新页面时查询数据库的最佳做法是什么?
  • 我认为这里没有安全问题。 @RohanPrabhu 可能只是阅读“将查询保存到 cookie”并假设您的意思是保存查询本身(而不是其结果),然后让您的服务器执行 cookie 中的任何查询。
  • 显示的代码是保存查询本身,而不是结果。

标签: python google-app-engine cookies


【解决方案1】:

您的语法错误正在发生,因为“%”运算符需要一个元组在其右侧,因此您的代码行应该是:

self.response.headers.add_header(str('Set-Cookie'), str('shops=%s; path=/; expires=%s') % (shoplist, expire_string))

注意多余的括号和逗号。

【讨论】:

  • 感谢 Jesse,它解决了错误!现在我要做的就是弄清楚这是否真的是最好的方法..
  • @Vincent 你可以在一个单独的 URL 中拥有一个商店名称列表(例如 JSON 格式),然后在该 URL 的响应标头中设置一个较长的到期时间。浏览器将第一次获取它,然后可能不会再次获取,直到到期为止。
猜你喜欢
  • 1970-01-01
  • 2012-05-19
  • 2013-06-21
  • 2013-06-11
  • 2016-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多