服务器是否保存移动请求的会话?

时间:2016-01-21 14:07:03

标签: android rest mobile login

我有网络开发的背景,但我对移动世界很陌生。所以,我不确定如何处理这种情况:

  • 用户在应用中登录
  • 凭据通过POST请求发送到服务器。
  • 如果响应正常,则会重定向到主要活动。

现在,我想知道是否必须保留用户的ID。我知道当我们使用浏览器时,服务器会保存一个“会话”,因此客户端不需要每次都发送ID来请求数据。移动应用程序(Android)也是如此吗?

顺便说一句,我还负责构建REST API,但没有针对移动设备的经验。

2 个答案:

答案 0 :(得分:2)

你误解了浏览器的情况,因此你的结论是有缺陷的。让我解释一下:当您使用Web浏览器登录网站时,确实会保存会话,但不仅仅是在服务器上。它也保存在客户端。无论何时从那里向服务器发送请求,您都必须发送存储的信息,称为cookie以识别您自己。

让我们更深入地考虑一下:服务器如何在不获取cookie的情况下将您的会话识别为您的会话?按IP地址?不,IP地址可以被许多人使用,它可能会改变。通过浏览器会话?是的,通过浏览器会话,也包括cookie。

现在您已了解会话由服务器和客户端保存,您肯定已经知道移动应用程序也需要相同的内容。客户端登录,因此为客户端生成cookie。这应该很难猜到。从那时起,客户端使用为其创建的cookie来使用服务器。

如果您不相信我,请访问您尚未登录的网站,然后运行console.log(document.cookie);,登录,然后再次运行console.log(document.cookie),然后注销并运行{{1}再次。

答案 1 :(得分:2)

要回答的大问题,这取决于并且不确定您使用的是哪种服务器技术。但是,我可以描述一种我实施的方法(.Net背景)。

您正在编写移动应用程序?

移动应用程序首先会通过https进行身份验证调用,将id和密码传递给您的登录api。网址通常是

  

// yourwebsite /帐户/令牌

您的api将验证用户,如果可以,则发出持票令牌。

移动应用程序需要记住此令牌,并在后续调用中将其传递给请求标头。这就是服务器将如何知道这是谁。您不再需要发送用户ID和密码。并且可能存在强烈的安全性论据,即根本不在移动设备上存储用户ID和密码。

现在,您的服务器代码将验证令牌,您将知道用户可以执行的操作。令牌通常会过期,因此任何移动客户端都需要检查并重新进行身份验证以获取新的令牌。

但是服务器如何知道这个令牌,它属于谁?

例如,在MVC世界中,这里有框架代码可以提供帮助。有很多MVC模板代码。如果您正在开发.Net api服务,请参阅此http://www.asp.net/web-api/overview/security/individual-accounts-in-web-api

如果您不是服务器上的.Net,我相信还会有其他东西来帮助您实现相同的原则。

至于开发RESTful API,ServiceStack非常值得考虑。如果太昂贵,至少要考虑他们的方法并推出自己的方法(特别是在你的api的版本化时)。