jquery - 使用 jquery 在 ajax xmlhttprequest 上重新使用 jsessionId

标签 jquery ajax session rest xmlhttprequest

如何编写 jquery ajax() 调用(例如 xmlhttprequest)来保留 session ID(例如发送浏览器 cookie 中已有的“jsessionID”cookie)

我们的背景:

  • 两个基于 Java 的 Web 应用程序
  • SSO 机制将用户登录到两个应用程序(即与应用程序 A 进行 session 101,与应用程序 B 进行 session 202)
  • 应用程序“A”使用 javascript (jquery) 对应用程序 B 进行剩余调用
  • 应用程序 B 在 Java jersey 中实现了 REST API (fwiw)
  • 从应用程序 A 到 B 的所有 GET 和“老式表单 POSTS”都连接到“ session B”上的同一个 session #202
  • XmlHttpRequests(例如 jquery 'ajax()' 调用)不会重复使用 session #202。每个 XmlHttpRequest 都会获得一个新 session

为什么要新 session ?

原因:XmlHttpRequest 没有将任何 cookie 传递给应用程序 B。Servlet 容器在 cookie 中设置 jsessionid。服务器未获取jsessionid

相比之下,JSONP 调用(动态生成 <script src="http://server/b/page.x">)确实传递 cookie。

问题

  • 获取 ajax xmlhttprequest 调用以将 session ID (cookie) 传递给目标应用程序的最简单方法是什么?
  • 有关于 ajax、cookie、xmlhttprequest 和 REST 的好的引用资料吗?
  • 有人可以推荐阅读有关 REST API 设计和身份验证的文章吗?

Web session 、状态和身份验证

我知道 REST 应该是无状态的,并且重新使用 Web session 似乎有些脆弱(即与使用 OAuth 和身份验证 token 相反,如 netflix 那样)

这是第一次迭代,我们即将“启动并运行”。这对于 JSONP 工作得很好,但 XmlHttpRequest 帖子失败了。

提前致谢

更新:

确实是一个幼稚的问题。

事实证明,通过 xmlhttprequest/ajax 进行跨站点发布存在固有的安全问题和解决方法。例如,Firefox 不会通过 XmlHttpRequest 传递 cookie,除非您添加特殊 header 。然后,Firefox 将对服务器进行“飞行前检查”(即 http OPTIONS 调用)以查看“这样可以吗?”。在 Firefox 执行您的“使用 cookies 发布”之前,您的服务器需要回答“OPTIONS”调用并说“是的,没问题”。

IE 和 Firefox 以不同的方式解决这些问题(即有点像 1998 年左右的 javascript)。我不知道 IE 是做什么的,但是经历过 1998 年之后,如果可能的话,我们不想真的走这条路。

我们编写了一个解决方法。

当我们开始编码时,我们团队中没有人知道这一点。 (即“jsonp 在原型(prototype)中运行良好;其他一切也应该如此”)

引用文献: Mozilla 如何解决此问题(http header 和预检检查) https://developer.mozilla.org/En/HTTP_access_control

跨源资源共享: http://en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing

最佳答案

您还可以通过部署有状态代理来解决此问题。它们必须安装在这两个应用程序上。然后,您可以通过代理进行所有基于 session 的调用,并将远程 session 数据存储到本地代理的 session 中。

关于jquery - 使用 jquery 在 ajax xmlhttprequest 上重新使用 jsessionId,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8830511/

相关文章:

javascript - 调整显示大小后重新加载 jquery 脚本

javascript - 在 HTML5 上取消滚动

javascript - Ajax 获取元素的 ID,其中有多个元素链接

javascript - 使用ajax和json保存数据

header() 重定向后 php session 丢失

php - 我可以计算 session 以确定在线人数吗?

php - session 背后有什么故事

jquery - 无法弄清楚为什么 JQuery UI datepicker 没有设置正确的日期

html - ajax调用后jQuery点击功能不起作用?

jquery - OCS 在基于 AJAX 的 SharePoint Web 部件中的存在