我一直在为android本机应用程序开发RESTful Web服务。我选择了ASP.NETWEB API。WEB API使在控制器中创建这些HTTP方法变得非常容易,并将我们的响应对象转换为json/xml。。。简直太棒了!
现在是用户身份验证和会话处理部分。首先,我认为在RESTful服务中实现会话会更容易。但对于在WEBneneneba API中启用会话并使android原生处理这些会话ID的配置,真的很失望。
- 首先,Android向WEB API发送登录请求
- WEB API检查身份验证,并在响应头中使用sessionid进行响应
- 现在Android本机读取响应标头->获取ASPNET_sessionId->保存在它的记忆中
- 来自android的进一步请求必须在请求头中设置此ASPNET_sessionId
你认为这是正确的方式吗
现在我有了另一个客户。Mobile jquery中的一个混合应用程序。现在面临以下问题:
- 访问源策略:所以我在响应标头中将
Access-Control-Allow-Origin
设置为*
。它解决了 - 现在我需要在jquery ajax post请求中设置会话id。并且发现在调用跨域服务时不可能为jquery-ajax设置头
如何管理混合应用程序的会话
此外,在创建必须从不同客户端应用程序中使用的web服务时,需要注意哪些事项?
经过大量研究,我得出了以下几点:
REST是无状态的。那么,为什么我们需要玩会话呢?给它一种有状态的生活?
无需启用会话状态。当用户登录到应用程序我们在数据库中为用户创建一个唯一的id。进一步的来自用户的请求将发送此唯一id作为消息的一部分身体服务器每次都会检查此唯一id以识别用户。
混合应用中的跨域问题
当将应用程序转换为与cordova的混合应用程序时,我们发现跨域问题并没有发生。据信,cordova转换了jqueryajax请求到来自android的本地请求调用。jsonp也是一个很好的解决方案。