将 cookie 域设置为 IP 地址(使用 CORS)
Posted
技术标签:
【中文标题】将 cookie 域设置为 IP 地址(使用 CORS)【英文标题】:Setting a cookie domain to an IP address (using CORS) 【发布时间】:2012-09-22 01:36:22 【问题描述】:我在 x.com 上托管了一个 javascript 应用程序,它使用 AJAX(通过 jQuery)联系托管在 LAN 环境中的 Apache 服务器(使用静态 IP,192.168.1.5)。
Apache 服务器公开了一个 API,要求用户设置特定的 cookie 才能使用它。
我的问题是我无法让 Apache 服务器设置具有正确域 (192.168.1.5) 的 cookie,以便浏览器通过 AJAX 调用发送 cookie。
有没有办法设置一个以IP为域的cookie?我见过的所有示例都要求域的格式为 example.org。
场景如下:
-
x.com 上的 JavaScript 应用程序向 192.168.1.5 发送 AJAX 身份验证请求。
来自 192.168.1.5 的响应有一个
Set-Cookie
标头,应该将 cookie 设置为 192.168.1.5 域。
x.com 上的 JavaScript 应用程序向 192.168.1.5 上的 API 发送 AJAX 请求,并将第 2 步中的 cookie 作为请求的一部分。
【问题讨论】:
将裸IP设置为cookie域应该可以。 AJAX 中的 Cookie 也应该可以工作。因此,您必须一次调试问题。您是否检查了浏览器的 cookie 存储以查看您的 AJAX 请求在其中放置了什么? 【参考方案1】:服务器和客户端都需要明确告诉对方他们想要 cookie。
JavaScript
xhrInstance.withCredentials = true;
服务器头
Access-Control-Allow-Credentials: true
https://developer.mozilla.org/en-US/docs/HTTP_access_control#Requests_with_credentials
总结一下:与IP地址无关。 cookie的host
可以是IP地址,也可以是域名。
【讨论】:
我们已经使用了您指定的两个标头,并且响应实际上尝试设置 cookie。但是因为我们使用AJAX调用本地ip,所以需要将cookie的域设置为本地IP。如果我们不指定 cookie 的域,它将被设置为请求者站点 (x.com) 的域,而不是 IP 地址。因此,问题不是如何触发服务器和客户端使用 cookie,而是如何将 cookie 关联到正确的域(本地 IP)。使用 php 的 setcookie 方法,我们一直无法将 cookie 的域设置为本地 IP。 听起来很奇怪和错误的行为。如果它真的按照你说的那样做,那就是一个安全风险(你是说监听 192.168.1.5 的服务器为 x.com 设置了一个域?这应该是不可能的)。 x.com 上的 Web 应用程序调用 192.168.1.5(使用 ajax)并且应该为 192.168.1.5 设置一个 cookie,以用于将来对 192.168.1.5 的所有请求。据我所知,这是一个有效的场景。位于 192.168.1.5 的服务器应该能够为它自己发出 cookie,通常这无需在 set-cookie 标头中指定域即可完成(因为 cookie 因此设置为请求者的域)。但是,在这种情况下,请求者是 x.com,但仍然需要为 192.168.1.5 域设置 cookie。如果 192.168.1.5 有公共域名但没有,这不是问题。以上是关于将 cookie 域设置为 IP 地址(使用 CORS)的主要内容,如果未能解决你的问题,请参考以下文章