【问题标题】:Rest Web Services and session handling for multiple clients多个客户端的 Rest Web 服务和会话处理
【发布时间】:2014-02-25 20:24:05
【问题描述】:

我一直在开发一个 RESTful 网络服务,供 Android 原生应用程序使用。我选择 ASP .NET WEB API。 WEB API 使得在控制器中创建这些 HTTP 方法变得非常容易,并将我们的响应对象转换为 json/xml... 简直太棒了!

现在是用户身份验证和那些会话处理部分。首先,我认为在我的 RESTful 服务中实现会话会更容易。但是对于在 WEB API 中启用会话以及让 android 原生来处理这些会话 id 的配置感到非常沮丧。

  1. 首先Android向WEB API发送登录请求
  2. WEB API 检查身份验证和响应标头中带有 sessionid 的响应
  3. 现在 Android 原生读取响应标头->获取 ASPNET_sessionId ->保留在其内存中
  4. 来自 android 的进一步请求必须在请求标头中设置此 ASPNET_sessionId

你认为这是正确的方法吗?

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

  • 访问源策略:所以我在响应标头中将Access-Control-Allow-Origin 设置为*。它解决了。
  • 现在我需要在 jquery ajax 发布请求中设置会话 ID。发现调用跨域服务时无法为jquery ajax设置headers。

如何管理我的混合应用程序的会话?

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

【问题讨论】:

    标签: c# android web-services rest asp.net-web-api


    【解决方案1】:

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

    REST 是无状态的。那么为什么我们需要使用 session 呢?给它一个有状态的生命?

    无需启用会话状态。当用户登录 应用程序我们为数据库中的用户创建一个唯一的 ID。更远 来自用户的请求会将此唯一 ID 作为消息的一部分发送 身体。服务器每次都会检查这个唯一的 id 来识别用户。

    混合应用中的跨域问题

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

    【讨论】:

    • 如果您正在为用户创建一个唯一的 id 并对其进行验证,那么您就是在为每个请求创建一个状态。仅仅因为您没有使用内置的 .net 框架来管理状态并不意味着您是无状态的。我并不是说你这样做是错误的,这只是语义。你不是无国籍的。您正在模仿 .net 框架。只是 .net 使用 cookie 来验证会话,并且您在消息正文中使用唯一 id。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多