python 中的会话对象

Session object in python

Session 对象是否与客户端保持相同的 TCP 连接? 在下面的代码中,来自客户端的请求被提交给处理程序,处理程序创建一个会话对象为什么对象上的 session["count"] 给出字典? 然后将响应返回给客户端,根据另一个请求是否重新执行代码? 这样就创建了另一个会话对象? 如果session没有return一个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))

你提出了几个问题,让我们一一道来:

  • 会话与 TCP 连接无关。当客户端和服务器都同意使用 HTTP Header keep-alive 时,TCP 连接将被维持。 (引自 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 sessions are stored in Datastore and Memcache or kept entirely as cookies. The first option also involves sending a token to the client to identify it in subsequent requests. Choosing one or another depends on your actual settings or the default ones if you haven't configured your own. Default settings 定义为使用数据存储选项。
  • 关于代码重新执行,您可以检查自己是否添加了一些日志代码来计算函数执行了多少次。

重要的一点,我注意到这个库到今年(2020 年 1 月 1 日)已经 latest update on 2nd of January 2016, so it has gone unmaintained for 4 years. It would be best if you change to an up to date library, for example the webapp2 session module. Furthermore, Python 2 is sunsetting,因此您可以考虑改用 python 3。

PD:我在 this website 下找到了您发布的确切代码。如果您从那里拿走它,请考虑下次在其原点中包含一个 reference/citation。