【问题标题】:Using sessions in Google App Engine with mobile client通过移动客户端在 Google App Engine 中使用会话
【发布时间】:2012-08-25 19:24:54
【问题描述】:

我希望使用gae-sessions or webapp2 sessions 实现对 Google App Engine 的会话支持,这更有意义。但是,我真的不明白它是如何工作的。在示例代码中,他们做的最多的工作是:

 session = get_current_session()

我认为会话的全部意义在于对用户进行身份验证。这是我的情况:

用户只有在登录后才能使用 iOS 应用程序。在用户第一次登录后,而不是每次都发送用户密码进行身份验证,我读到这就是会话 ID 的用途.那么现在,我该如何使用这些框架来做到这一点呢?

  • 不应该有一些id吗?
  • 成功登录后,我会向客户端发送什么信息?
  • get_current_session 如何知道用户是谁?
  • 客户端在每次请求时向服务器发送什么?
  • 如果用户从多个设备登录怎么办?

请记住,客户端不是浏览器,而是移动应用程序。我只是不明白这一切如何适用于这种情况。

【问题讨论】:

    标签: python ios google-app-engine session


    【解决方案1】:

    您可以使用 webapp2 为您处理身份验证。 webapp2_extras 中有一个名为 auth 的模块。它将帮助您注册、登录和注销。

    这是我的详细答案:

    Handling Sessions on Google App Engine with Android/IPhone

    使用应用引擎登录后。您只需要存储身份验证 cookie 并将其发送到子序列请求。 在服务器端,您可以检查用户是否登录:

    from webapp2_extras import auth
    if auth.get_user_by_session():
        #Logged in      
    else:
        #Not logged in
    

    注意:对于使用 Android 的用户来说,另一种更简单的方法是在服务器端使用 Google 身份验证,并使用 AERC(Android 的 App Engine Rest Client)来帮助您通过服务器进行身份验证。

    希望对你有帮助:)

    【讨论】:

      【解决方案2】:

      我认为会话的全部意义在于对用户进行身份验证。

      不,会话用于识别属于同一浏览器的请求。它不识别或验证用户。这是您的代码的工作。 会话通常通过 Cookie 工作:在第一次请求时,服务器发送一个 cookie,然后在所有后续请求中,浏览器将 cookie 添加到请求中。这就是服务器如何知道一系列请求属于同一个客户端(浏览器)的方式。 为了在你的情况下工作,你的Android code should use cookies

      不应该有一些id吗?

      是的,登录后您通常会得到一些用户 ID,但这是特定于登录过程的。这也与会话无关。 会话基本上是服务器端的一个对象,当请求来自同一个客户端时,它总是相同的。您可以将一些属性存储到会话对象中:通常在用户执行登录后,您会将他们的用户 ID 存储到会话中,以便更轻松地识别来自同一用户的请求。当用户注销时,您将从会话中删除用户 ID。

      成功登录后我会向客户端发送什么?

      在服务器 (= pick your library) 和 enable cookies in Android code 上启用会话。然后会话将在您的客户端和服务器之间自动处理。成功登录后,只需将用户 ID 存储到会话中。在后续请求中,只需检查会话是否包含用户 UD。

      get_current_session 如何知道用户是谁?

      它没有。登录后,您将一些与用户相关的数据存储到会话中,并在后续请求中检查这些数据。

      客户端在每次请求时向服务器发送什么?

      为了使会话正常工作,它应该发送一个 cookie。如果您在 Android HttpClient 代码中启用 cookie 支持,这将自动完成(上面的链接)。

      如果用户从多个设备登录怎么办?

      多个客户端会导致多个独立会话。由您的服务器代码来识别属于同一用户的会话(= 多个会话将在其中存储相同的用户 ID)。

      【讨论】:

      • Nitpick:你真的应该引用引号,而不是把它们放在代码块中。
      • 现在这如何与移动应用程序一起工作 - 会话是否将应用程序视为浏览器?从理论上讲,如果用户有一个会话,但删除了应用程序并重新安装它会发生什么 - 会话仍然有效 - 为什么或为什么不? (我知道我可以很容易地对此进行测试,但我想了解为什么
      • 会话(大部分)基于 cookie,浏览器会自动处理(并保存到磁盘)。在您的应用程序中,您需要在代码中处理 cookie。 BasicCookieStore 类可以帮助您解决此问题,但是 afaik 它是基于内存的,因此它会在重新启动和重新安装之间丢失会话信息。如果您需要一些不同的东西来重新启动,您应该通过扩展“CookieStore”来创建自己的版本:developer.android.com/reference/org/apache/http/client/…
      【解决方案3】:

      首先阅读 HTTP cookie http://en.wikipedia.org/wiki/HTTP_cookie

      会话实际上只是服务器上的一个数据对象。把它想象成一个 python 字典。它应该被持久化到数据存储和内存缓存中。它具有某种 id,通常存储在 HTTP cookie 中,在服务器和浏览器之间来回传递。

      当您收到请求时,会话处理库实质上会执行以下操作: - 查看 cookie 并获取会话 ID - 它 - 从数据存储或内存缓存中提取该 ID 的会话数据,并将其插入到“请求”对象中。

      它还处理诸如保存数据之类的簿记,以及验证 cookie 未被篡改。

      根据您使用的会话库,您可以将会话与用户关联起来。通常,您不一定需要将会话与用户显式关联。如果任何一位用户使用多个浏览器访问您的站点,您可能会有多个会话。但是,您需要小心在用户注销时终止会话,以及在新用户登录时启动新会话。

      由于会话通常是一次性的,您的数据存储区中最终会有一堆未使用或过期的会话,您需要一些东西来清理它们。

      就您的移动应用而言,是的,您的移动应用需要像浏览器一样运行,存储 cookie 数据,并在每次请求时将其传回服务器。如果您使用的是 android HttpURLConnection,请使用可选的 CookieManager 来处理这部分。

      【讨论】:

        猜你喜欢
        • 2013-10-21
        • 1970-01-01
        • 1970-01-01
        • 2013-11-05
        • 2015-09-03
        • 1970-01-01
        • 2014-05-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多