【问题标题】:Session object in pythonpython中的会话对象
【发布时间】:2020-01-16 18:23:33
【问题描述】:

Session 对象是否与客户端保持相同的 TCP 连接? 在下面的代码中,来自客户端的请求被提交给处理程序,处理程序创建了一个会话对象,为什么对象上的session["count"] 会给出一个字典? 然后将响应返回给客户端,根据另一个请求是否重新执行代码? 这样就创建了另一个会话对象? 如果会话没有向客户端返回cookie,会话如何存储之前的计数信息?

from appengine_utilities import sessions

class SubmitHandler(webapp.RequestHandler):
  def get(self):

    session = sessions.Session()
    if "count" in session:
        session["count"]=session["count"]+1
    else:
        session["count"]=1

    template_values={'message':"You have clicked:"+str(session["count"])}
    # render the page using the template engine
    path = os.path.join(os.path.dirname(__file__),'index.html')
    self.response.out.write(template.render(path,template_values))

【问题讨论】:

  • 我关于 Google App Engine 的假设正确吗?
  • 是的,但它只使用 python 会话模块
  • appengine_utilities 肯定不是标准的 Python 模块。

标签: python google-app-engine google-app-engine-python


【解决方案1】:

您提出了几个问题,让我们一一回答:

  • 会话与 TCP 连接无关。当客户端和服务器都同意使用 HTTP Header keep-alive 时,就会保持 TCP 连接。 (在answer 中引自 Pablo Santa Cruz)。
  • 查看__getitem__ 定义下第1010 行中的模块session.py,我发现了以下TODO: It's broke here, but I'm not sure why, it's returning a model object。可能是这样的,我自己没有调试过。
  • 来自 appengine_utilities documentation 的会话存储在 Datastore 和 Memcache 中或完全保存为 cookie。第一个选项还涉及向客户端发送令牌以在后续请求中识别它。选择一个或另一个取决于您的实际设置或默认设置(如果您尚未配置自己的设置)。 Default settings 被定义为使用 Datastore 选项。
  • 关于代码重新执行,您可以检查自己是否添加了一些日志记录代码来计算函数执行的次数。

重要的一点,我注意到这个库在 2016 年 1 月 2 日有它的 latest update,所以它已经 4 年没有维护了。最好更改为最新的库,例如 webapp2 session 模块。此外,Python 2 is sunsetting 在今年(2020 年 1 月 1 日)之前,您可以考虑改用 python 3。

PD:我找到了您在this website 下发布的确切代码。如果您从那里拿走它,请考虑下次包含对其来源的参考/引用。

【讨论】:

    猜你喜欢
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    • 2010-11-14
    • 1970-01-01
    • 2021-04-24
    • 2017-07-16
    相关资源
    最近更新 更多