提问人:Peter 提问时间:9/18/2008 更新时间:5/28/2009 访问量:2971
能否在服务器端处理 Ajax (XHR) 调用期间可靠地设置或删除 cookie?
Can you reliably set or delete a cookie during the server side processing of an Ajax (XHR) call?
问:
我自己对此做了一些测试(确切地说,是在 DWR 框架 Ajax 请求处理程序的服务器端处理期间),似乎您可以成功操作 cookie,但这与我阅读的有关 Ajax 最佳实践以及浏览器如何解释来自 XmlHttpRequest 的响应的许多内容背道而驰。注意:我已经测试过:
- IE 6 和 7
- Firefox 2 和 3
- Safari 浏览器
在所有情况下,浏览器在 Ajax 请求处理期间对 HttpServletResponse 对象的标准 cookie 操作都得到了正确的解释,但我想知道将 cookie 操作推送到客户端是否是最佳实践,或者这个(更干净)服务器端 cookie 处理是否可以信任。
我欢迎特定于 DWR 框架和 Ajax 的答案。
答:
在客户端操作 cookie 与“最佳实践”相反。而且也没有必要。HttpOnly cookie 的引入并非无缘无故。
评论
XMLHttpRequest 始终使用 Web 浏览器的连接框架。这是 AJAX 程序正常工作的要求,因为如果 XHR 对象无法访问浏览器的 cookie 池,用户将被注销。
从理论上讲,Web 浏览器可以在不使用浏览器的连接框架的情况下简单地共享会话 cookie,但这在实践中从未发生过(据我所知)。甚至 Flash 插件也使用 Web 浏览器的连接。
因此,最终结果是通过 AJAX 操作 cookie 是安全的。请记住,AJAX 调用可能永远不会发生。它们不是保证的事件,所以不要指望它们。
评论
在DWR的上下文中,它可能并不“安全”。
通过阅读 DWR 网站,它说:
请务必将 HTTP 请求和响应视为只读。虽然 HTTP 标头可能会通过 OK,但某些浏览器很可能会忽略它们。
我认为这意味着设置 cookie 或请求属性是禁忌。
话虽如此,我有确实设置请求属性的代码(我在阅读该页面之前编写的代码),并且它似乎工作正常(除了删除我在上面的评论中提到的 cookie)。
上一个:全面的服务器端验证
评论