【问题标题】:JSON API intended for JavaScript use - handle session data server side, or in browser?用于 JavaScript 的 JSON API - 处理会话数据服务器端,还是在浏览器中?
【发布时间】:2010-06-25 15:44:31
【问题描述】:

我正在构建一个将使用 JSON 的 API。此 API 的主要用途是浏览器中的 AJAX,但它也可以由用户的 PHP 脚本等在服务器端使用。

我有两种方法可以做到这一点(我认为):

  1. 构建 API,使其使用 HTTP 标头设置会话 cookie 并检索所有数据以使用 COOKIE['session_id'](伪代码)维护状态
  2. 构建 API,使其返回 session_id 并允许用户的 JavaScript 代码为 session_id 设置自己的 cookie

总的来说,我有点迷茫。哪种方式更安全(CSRF 等),开发人员容易理解,更容易在服务器端进行更改,而无需告诉用户他们必须更新他们的代码。

另外,您是否建议使用 JSON-RPC 规范,如果是,是否其中一种方法能更好地支持 JSON-RPC?

非常感谢任何帮助。

【问题讨论】:

    标签: javascript api cookies


    【解决方案1】:

    我遇到了同样的问题(如何为基于 JSON-RPC 的 Web 服务基础架构进行会话)。我最终为会话使用了 URL 参数。我的推理:

    • 使用 cookie 意味着 cookie 最终成为应用程序运行的基础。我更喜欢完全禁用 cookie 并仍然让应用正常运行的选项。
    • 从非 Web 环境(例如,从本机 Windows 应用程序)寻址 JSON-RPC 服务时,HTTP 标头似乎会出现问题。
    • 使用会话作为每个方法的第一个参数是我觉得很丑陋的事情。

    由于带有 session 参数的 URL 仅用于调用 Web 服务方法,因此不会出现在浏览器的 URL 栏中,我认为这种工作方式实际上没有安全隐患。但是安全是一件棘手的事情,所以我相信稍后会有人纠正我。

    【讨论】:

    • 让 API 在没有 cookie 的情况下工作肯定会让开发人员更快乐。包含“session_id”可能更丑陋,但它更符合 HTTP 是无状态的并且应该以这种方式对待的事实。
    【解决方案2】:

    会话应该由您的应用程序后端处理,它应该创建会话并创建相关的 cookie。从某种角度来看,您不会在 AJAX 调用中处理会话处理,因为浏览器会自动发送它为网站分配的 cookie。

    从浏览器外部使用 API 时,人们可以通过多种方式处理请求。 Cookie 由 cURL 等 HTTP 库不显眼地处理。

    我的问题是你为什么需要 API 会话,你只是将它用于授权吗?

    【讨论】:

    • 我称它为“session_id”,但它实际上只是最终用户将编辑的对象的对象 ID(因为他们将在几分钟内编辑同一个对象)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多