如何编写jquery ajax()调用(例如xmlhttprequest)以保留会话ID(例如,在浏览器的cookie中发送'jsessionID'cookie)
我们的背景:
为什么选择新会话?
原因:XmlHttpRequest不会将任何cookie传递给应用程序B. Servlet容器在cookie中设置jsessionid。服务器没有得到jsessionid
相比之下,JSONP调用(动态生成< script src =“http://server/b/page.x”>)执行传递cookie。
问题
网络会话,状态和身份验证
我知道REST应该是无状态的,重新使用网络会话似乎有点脆弱(即与使用OAuth和身份验证令牌相反,netflix也是如此)
这是第一次迭代,我们接近让事情“正常运行”。这适用于JSONP,但XmlHttpRequest发布失败。
提前致谢
更新
确实是一个天真的问题。
事实证明,通过xmlhttprequest / ajax进行跨站点发布存在固有的安全问题和解决方法。例如,Firefox除非添加特殊标头,否则不会使用XmlHttpRequest传递cookie。然后,Firefox将对服务器进行“飞行前检查”(即http OPTIONS调用)以查看“这样可以吗?”。你的服务器需要回答“OPTIONS”调用,说“是的没关系”,之后firefox将执行你的“使用cookies发布”。
IE和Firefox以不同的方式解决这些问题(即有点像javascript大约1998年)。我不知道IE会做什么,但是经历了1998年,我们不想真的走这条路,如果可能的话。
我们编写了一个解决方法。
当我们开始编码时,我们的团队都不知道这一点。 (即“jsonp在原型中工作得很好;其他一切也应该”)
参考文献: Mozilla如何解决这个问题(http标头和预检检查) https://developer.mozilla.org/En/HTTP_access_control
跨源资源共享: http://en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing
答案 0 :(得分:1)
您还可以通过部署有状态代理来解决此问题。他们必须安装在两个应用程序上。然后,您将通过代理进行所有基于会话的调用,并将远程会话数据存储到本地代理的会话中。