在服务器端处理Ajax(XHR)调用期间,您能否可靠地设置或删除cookie?

时间:2008-09-18 02:50:56

标签: ajax xmlhttprequest cookies server-side dwr

我自己做了一些测试(确切地说,在DWR框架Ajax请求处理程序的服务器端处理期间)并且看起来你可以成功地操作cookie,但这与我在Ajax上阅读的内容相去甚远最佳实践以及浏览器如何解释来自XmlHttpRequest的响应。注意我已经测试过了:

  • IE 6和7
  • Firefox 2和3
  • Safari浏览器

并且在所有情况下,浏览器正确解释了Ajax请求处理期间HttpServletResponse对象上的标准cookie操作,但我想知道是否最好将cookie操作推送到客户端,或者如果这样(很多)清洁)服务器端cookie处理可以信任。

我欢迎特别针对DWR框架和Ajax的答案。

3 个答案:

答案 0 :(得分:8)

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

理论上,Web浏览器可以在不使用浏览器的连接框架的情况下简单地共享会话cookie,但这实际上从未(据我所知)发生过。甚至Flash插件也使用Web浏览器的连接。

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

答案 1 :(得分:1)

在DWR的背景下,它可能不是“安全的”。

从阅读the DWR site开始,它说:

  

将HTTP请求和响应视为只读非常重要。虽然HTTP标头可能会通过正常,但某些浏览器很可能会忽略它们。

我认为这意味着设置cookie或请求属性是禁止的 说,我有代码设置请求属性(我在阅读该页面之前编写的代码),它似乎工作正常(除了删除我在上面的评论中提到的cookie)。

答案 2 :(得分:-1)

在客户端操作cookie与“最佳实践”相反。它也没有必要。 HttpOnly cookies没有被引入。