C# Rest Web服务和多个客户端的会话处理

C# Rest Web服务和多个客户端的会话处理,c#,android,web-services,rest,asp.net-web-api,C#,Android,Web Services,Rest,Asp.net Web Api,我一直在为android本机应用程序开发RESTful Web服务。我选择ASP.NETWebAPI。WEB API使在控制器中创建这些HTTP方法变得非常容易,并将响应对象转换为json/xml。。。简直太棒了 现在是用户身份验证和那些会话处理部分。首先,我认为在RESTful服务中实现会话会更容易。但对于在WebAPI中启用会话的配置,以及让android本机处理这些会话ID的配置,真的很失望 首先,Android向WEB API发送登录请求 WEB API检查身份验证,并在响应头中使用se

我一直在为android本机应用程序开发RESTful Web服务。我选择ASP.NETWebAPI。WEB API使在控制器中创建这些HTTP方法变得非常容易,并将响应对象转换为json/xml。。。简直太棒了

现在是用户身份验证和那些会话处理部分。首先,我认为在RESTful服务中实现会话会更容易。但对于在WebAPI中启用会话的配置,以及让android本机处理这些会话ID的配置,真的很失望

  • 首先,Android向WEB API发送登录请求
  • WEB API检查身份验证,并在响应头中使用sessionid检查响应
  • 现在Android native读取响应头->获取ASPNET\u sessionId->保存在内存中
  • 来自android的进一步请求必须在请求头中设置此ASPNET_sessionId
  • 你认为这是正确的方法吗

    现在我有了另一个客户。移动jquery中的混合应用程序。目前面临以下问题:

    • 访问原点策略:所以我在响应头中将
      访问控制允许原点设置为
      *
      。这就解决了
    • 现在我需要在jQueryAjax post请求中设置会话id。并发现在调用跨域服务时无法为jQueryAjax设置头
    如何管理混合应用程序的会话


    另外,在创建必须从不同客户端应用程序使用的web服务时,需要注意哪些事项?

    经过大量研究,我得出以下几点:

    REST是无状态的。那么我们为什么要玩session呢?给它一个有状态的生活

    不需要启用会话状态。当用户登录到 我们在数据库中为用户创建一个唯一的id。进一步的 来自用户的请求将发送此唯一id作为消息的一部分 身体。服务器每次检查此唯一id以识别用户

    混合应用程序中的跨域问题

    将应用程序转换为与cordova混合时,我们发现跨域 问题没有发生。人们相信cordova转换了jquery ajax请求到来自android的本机请求调用。jsonp也是一个很好的解决方案


    如果要为用户创建唯一的id并对其进行验证,则需要为每个请求创建一个状态。仅仅因为您没有使用内置的.net框架来管理状态并不意味着您是无状态的。我不是说你错了,这只是语义学。你不是无国籍的。您正在做的是模仿.net框架。只是.net使用cookie来验证会话,并且在消息体中使用唯一的id。