我们可以在服务器端处理Ajax(XHR)调用期间可靠地设置或者删除cookie吗?

时间:2020-03-06 14:19:47  来源:igfitidea点击:

我对此进行了一些测试(在服务器端对DWR Framework Ajax请求处理程序进行精确处理的过程中),看来我们可以成功操纵cookie,但这与我在Ajax最佳实践和浏览器如何解释XmlHttpRequest的响应。注意我已经测试过:

  • IE 6和7
  • Firefox 2和3
  • 苹果浏览器

并且在所有情况下,浏览器都正确解释了Ajax请求处理期间HttpServletResponse对象上的标准cookie操作,但是我想知道是否将cookie操作推到客户端是否是最佳实践,或者这台服务器(更清洁)可以对Cookie进行处理。

我欢迎针对DWR框架和一般Ajax的答案。

解决方案

在客户端上操作cookie与"最佳做法"相反。而且也没有必要。 HttpOnly cookie并非一无所获。

XMLHttpRequest始终使用Web浏览器的连接框架。这是AJAX程序正确运行的要求,因为如果XHR对象无法访问浏览器的Cookie池,则用户将注销。

从理论上讲,Web浏览器可以简单地共享会话cookie,而无需使用浏览器的连接框架,但是据我所知,这在实践中从未发生过。甚至Flash插件也使用Web浏览器的连接。

因此,最终结果是通过AJAX操作cookie是安全的。请记住,AJAX调用可能永远不会发生。它们不是保证事件,因此不要指望它们。

在DWR的情况下,它可能不是"安全的"。

通过阅读DWR网站可以看到:

It is important that you treat the HTTP request and response as read-only. While HTTP headers might get through OK, there is a good chance that some browsers will ignore them.

我认为这意味着设置cookie或者请求属性是不行的。
话说回来,我有设置请求属性的代码(我在阅读该页面之前编写的代码),并且看起来工作正常(除了删除我在上面的评论中提到的cookie)。