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

问题描述:

我已经对此做了一些测试(在服务器端处理DWR框架Ajax请求处理程序时),看起来您可以成功操作cookie,但这与我在Ajax上阅读的最佳做法相反实践以及浏览器如何解释来自XmlHttpRequest的响应。注意我已经在测试:您可以在服务器端处理Ajax(XHR)调用期间可靠地设置或删除cookie吗?

  • IE 6和7
  • Firefox 2和3
  • 的Safari

并且在所有情况中的Ajax请求处理HttpServletResponse对象上标准的cookie行动是正确由浏览器解释,但我想知道是否最好的做法将cookie操作推送到客户端,或者如果这个(更干净的)服务器端cookie处理可以被信任。

我会欢迎答案都具体到DWR框架和一般的Ajax。

+0

我想知道这一点,因为我在删除服务器端DWR请求中的cookie时遇到了问题。 我可以创建它们,但不能删除它们 - 自从假设它无法完成之后就已经计算出无cookie的解决方案。 – 2009-05-28 06:58:14

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

从理论上讲,网络浏览器可以在不使用浏览器的连接框架的情况下简单地共享会话cookie,但这从来没有(据我所知)在实践中发生。即使Flash插件也使用Web浏览器的连接。

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

+0

非常感谢,尽管数量不同,但考虑到我自己的测试结果,投票以及围绕服务器端业务逻辑集中的一般最佳实践,这是最有意义的。 – Peter 2008-09-18 17:50:14

在客户端操作cookies与“最佳实践”相反。而且它也不是必需的。 HttpOnly饼干没有被引入没有。

+0

他没有在客户端上操作cookie;他正在服务器上操作它们以响应Ajax请求。在任何情况下,只要客户端的cookie操作在JS被禁用或不受支持时优雅地降级,通常不会被视为有害的。 – 2008-09-18 04:32:08

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

从阅读the DWR site它说:

,你对待HTTP请求和响应为只读是很重要的。虽然HTTP头可能会通过确认,但有些浏览器很可能会忽略它们。

我以为这意味着设置cookie或请求属性是一个禁忌。
说了这样的话,我有设置请求属性的代码(我在阅读该页面之前写的代码),它看起来工作正常(除了删除我在上面评论中提到的cookie)。