【问题标题】:Setting a cookie for another domain being 302-redirected to为另一个被 302 重定向到的域设置 cookie
【发布时间】:2011-06-15 15:43:08
【问题描述】:

(这个问题更像是对现实的检验——我很确定这是可能的,但我想确定一下。)

我正在编写一个代理服务器,它接收 HTTP 请求,将它们传递给远程服务器,并返回远程服务器的响应。

我遇到了一个问题,远程服务器响应之一是设置 cookie 的 302 重定向。这是一个例子:

server: nginx/0.7.65
date: Wed, 26 Jan 2011 04:42:18 GMT
connection: keep-alive
set-cookie: JSESSIONID=FFFFFFFUUUUUUUUUUU; Domain=.50.16.34.61; Path=/
location: http://50.16.34.61/client/whatever.html
content-length: "0"

当客户端跟随重定向到 50.16.34.61(与代理服务器不同的域)时,我注意到尚未设置 cookie。

我想在这里用 set-cookie 指令的域部分做一些疯狂的事情吗?

编辑

基本上,我做错了,根据http://www.ietf.org/rfc/rfc2109.txt,请求主机确实需要是 set-cookie 指令中域的超集。

/悲伤长号

【问题讨论】:

  • 很久以前是我,是的:)

标签: http session cookies redirect


【解决方案1】:

客户端遵循重定向到 50.16.34.61,但该页面是否在该域上请求?代理不是这里的问题——如果请求的资源(生成 302)在不同的域上,则不能为不同的域设置 cookie。

代理当然不应该妨碍。

编辑:等一下;这实际上不是 HTTP 代理服务器,而是代理的 HTTP 服务器?

【讨论】:

  • 这是一个代理请求的 HTTP 服务器。对不起,令人困惑的描述。我也觉得无法将你的答案完全正确地标记为一个混蛋,但 Metal 早一点。诅咒你 Stack Overflowwwwwwwwww...
  • 啊,我明白了!不过,Metal 在告诉您如何实际解决问题方面更正确;-) 更改 Location 和 Set-Cookie 行是这里要做的事情。您可能还需要做一些页面内链接更改,这可能会变得丑陋......祝你好运!
【解决方案2】:

只有当浏览器请求的 Host: 标头是所用值的超集时,Domain= cookie 才会起作用。

在您的情况下,您的代理服务器似乎假装是另一台服务器,因此拦截这些 Location: 和 Set-Cookie: 标题行以及许多其他内容可能是有意义的,并替换相关位以保留指向您的服务器。

【讨论】:

    猜你喜欢
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    • 2020-06-27
    相关资源
    最近更新 更多