3

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

 session = get_current_session()

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

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

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

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

4

3 回答 3

4

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

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

不是应该有id吗?

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

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

在服务器上启用会话(=选择您的库)并在 Android 代码中启用 cookie。然后会话将在您的客户端和服务器之间自动处理。成功登录后,只需将用户 ID 存储到会话中。在后续请求中,只需检查会话是否包含用户 UD。

get_current_session 如何知道用户是谁?

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

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

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

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

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

于 2012-08-31T08:16:00.467 回答
0

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

这是我的详细回答:

使用 Android/iPhone 在 Google App Engine 上处理会话

使用应用引擎登录后。您只需要存储身份验证 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)来帮助您通过服务器进行身份验证。

希望能帮助到你 :)

于 2012-08-31T03:39:48.877 回答
0

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

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

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

它还处理簿记,例如保存数据,并验证 cookie 未被篡改。

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

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

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

于 2012-08-31T18:54:17.140 回答