【问题标题】:Google App Engine : Common way to implement sessioned API/ajax requests?Google App Engine:实现会话 API/ajax 请求的常用方法?
【发布时间】:2013-04-08 04:05:02
【问题描述】:

我什至不明白用户会话信息是如何在常规 HTTP/S GET 调用中保留的,我指的是细节,例如服务器/客户端交换中的代码和数据逐行 .我基本上知道它是服务器上的一个会话对象,其中包含您需要的内容,并且该对象的 id 包含在“cookie”WTHTI 中。这变得不透明(对Javascript)与服务器来回传递。该死的那个碰不得的饼干。

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

我猜想每个 API 调用都会发送一个令牌,但不是很乱,只是在客户端的 Javascript/DOM 中有一个令牌?

cookies 怎么样,cookies 到底是怎么工作的?这对我来说是一个盲点,而且非常重要。我不知道为什么它不透明且不易于实施。

如果我们所做的只是将一个 id 来回传输并转发给 Ident 用户,并调用用户的会话对象,那么 cookie 和(不可食用的)令牌有什么区别?

是否完全可以只进行用户身份验证、转换到会话、只使用令牌,还是必须使用 cookie?

我正在实现我自己的自定义身份验证(在 webapp2_extras 的背面),它将使用安全的 url 和所有常用的 saltyhashed 密码预防措施。但是我所有的 AJAX 机器的“令牌”和“cookie”会话部分仍然让我大吃一惊。

【问题讨论】:

    标签: ajax google-app-engine session cookies access-token


    【解决方案1】:

    Cookie:

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

    在此处了解更多信息:http://en.wikipedia.org/wiki/HTTP_cookie

    会话是来自同一用户的一系列 http 请求。它们通常是使用 cookie 构建的(还有其他技术),因此会话依赖于 cookie(但 cookie 不依赖于会话)。

    服务器会话是绑定到特定 cookie 的内部持久存储,例如生产环境中的 GAE 使用名称为 ACSID 的 cookie 来跟踪其会话。因此,当服务器没有获得会话 cookie 时,它​​假定这是一个新会话并创建一个新的会话 cookie 并将其发送到客户端并创建与该会话相关联的对象存储。之后,每当服务器获取会话 cookie 时,它​​都会加载绑定到该 cookie 的对象存储。

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

    问:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-03
      • 1970-01-01
      • 2017-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-14
      相关资源
      最近更新 更多