Google App Engine:实现会话API/ajax请求的通用方式



我甚至不明白用户会话信息是如何在常规HTTP/S GET调用中持久化的,我指的是细节,比如服务器/客户端交换中逐行的代码和数据。我基本上得到它是服务器上的一个会话对象,包含你需要的东西,那个对象的id包含在'cookie' WTHTI中。这是不透明的(对Javascript来说)与服务器来回传递的。该死的那块不可碰的饼干。

我想在python/AppEngine实现会话CRUD数据库端点。实现会话持久性的最佳方法是什么?(没有框架,插件,或现成的解决方案,我想了解)。我甚至不知道这些在任何应用程序中是如何实现的,但这太常见了。

我猜像一个令牌发送与每个API调用,但不是很乱,只是有一个令牌躺在Javascript/DOM在客户端?

那饼干呢,饼干到底是怎么工作的?这对我来说是个盲点,但又很关键。我不知道为什么它不透明,不容易实现。

如果我们所做的只是将id来回传递给识别用户,并调用用户的会话对象,那么cookie和(不可食用的)令牌之间的区别是什么?

是否完全有可能只做用户认证,转换到会话,只使用令牌,或者必须使用cookie ?

我正在实现我自己的自定义认证(在webapp2_extras的后面),它将在安全的url上,并使用所有通常的盐哈希密码预防措施。但是所有AJAX机器的"令牌"one_answers"cookie"会话部分仍然让我感到困惑。

Cookies:

  1. cookie由浏览器内部处理,而不是Javascript或DOM。
  2. cookie非常简单:只是一个名称:值对在HTTP头
  3. 中作为字符串发送。
  4. 操作原理非常简单:服务器发送cookie到浏览器,之后浏览器发送cookie与每个请求服务器(这取决于cookie的类型和它的属性)
  5. 有几种类型的cookie,但会话cookie是会话绑定的:浏览器将它们保存在内存中并发送它们,直到用户关闭浏览器应用程序。

在这里阅读更多信息:http://en.wikipedia.org/wiki/HTTP_cookie

会话是来自同一用户的一系列http请求。它们通常是通过使用cookie构建的(也有其他技术),因此会话依赖于cookie(但cookie不依赖于会话)。 服务器会话是绑定到特定cookie的内部持久存储,例如GAE在生产中使用名称为ACSID的cookie来跟踪它的会话。因此,当服务器没有获得会话cookie时,它假设这是一个新的会话,并创建一个新的会话cookie并将其发送给客户端,并创建与该会话绑定的对象存储。之后,无论服务器何时获得会话cookie,它都会加载绑定到该cookie的对象存储。

注意:cookie和会话不是身份验证:它们可以告诉您来自同一用户的一系列请求,但它们不告诉您这是哪个用户。这是身份验证的工作,您可以使用自己的身份验证协议(基于用户名-密码或类似),也可以使用可用的身份验证协议之一(OpenID, OAuth)。

Qs:

  • 是的,你可以使用"不可食用"令牌来跟踪自己的会话,前提是你同时控制服务器和客户端。OTOH浏览器是基于标准的,他们使用开箱即用的cookie来提供会话(但你仍然可以在JS中滚动自己的会话)。实现会话持久化的最佳方法:使用python现有的会话库。出于学习目的,您仍然可以使用自己的解决方案,但对于生产,您应该坚持使用经过测试的解决方案之一。

最新更新