在Google App Engine中使用移动客户端中的会话

时间:2012-08-31 00:40:14

标签: python ios google-app-engine session

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

 session = get_current_session()

我认为会话的重点是验证用户身份。这是我的情况:

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

  • 是不是应该有一些身份证?
  • 成功登录后,我会将哪些内容发回客户端?
  • get_current_session如何知道用户是谁?
  • 客户端每次请求都会向服务器发送什么内容?
  • 如果用户是从多个设备登录的,该怎么办?

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

3 个答案:

答案 0 :(得分:4)

  

我认为会话的重点是验证用户身份。

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

  

是不是应该有一些身份证?

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

  

成功登录后我会将哪些内容发回客户端?

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

  

get_current_session如何知道用户是谁?

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

  

客户端每次请求都会向服务器发送什么内容?

要使会话发挥作用,它应该发送一个cookie。如果您在Android HttpClient代码中启用cookie支持(上面的链接),则会自动完成此操作。

  

如果用户是从多个设备登录的,该怎么办?

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

答案 1 :(得分:0)

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

以下是我的详细答案:

Handling Sessions on Google App Engine with Android/IPhone

使用app引擎登录后。您只需存储身份验证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 :(得分:0)

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

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

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

它还可以处理簿记,例如保存数据,以及验证Cookie是否未被篡改。

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

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

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