2012-04-20 294 views
9

我正在开发一个REST Api,它需要有状态(没有解决方法,我使用的是没有可序列化对象的本机库等等)Set-Cookie Header在响应中,但浏览器在下次请求中未设置Cookie

此Rest API暴露在域domainA上的Web服务器上。 响应包含设置为*的Access-Control-Allow-Origin头,所以我不需要JSON-P。 (我不知道这个细节是否关心)。

我在请求DomainA的domainB上做了此API的GWT使用示例。浏览器不会添加之前设置的cookie。这是'无国界'的作品。

样本是否也必须在DomainA上? 是否有一个workaroud或一个特定的标题设置?

编辑: 我在Cookie中设置了一个主域。它不起作用。浏览器仍然不会在下一个请求标头中设置cookie会话。

请求:

HeadersPreviewResponseCookiesTiming 
Request URL:http://subdomainB.mydomain.com/request 
Request Method:POST 
Status Code:200 OK 
Request Headersview source 
Accept:*/* 
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3 
Accept-Encoding:gzip,deflate,sdch 
Accept-Language:fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4 
Connection:keep-alive 
Content-Length:1185 
Content-type:application/x-www-form-urlencoded 
Host:subdomainB.mydomain.com 
Origin:http://subdomainA.mydomain.com 
Referer:http://subdomainA.mydomain.com/BLABLABLA 
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.8 (KHTML, like Gecko) Chrome/20.0.1105.0 Safari/536.8 

响应:

Response Headersview source 
Access-Control-Allow-Origin:* 
Cache-Control:no-cache, no-store, max-age=0 
Connection:Keep-Alive 
Content-Language:fr-FR 
Content-Type:application/json;charset=UTF-8 
Date:Wed, 25 Apr 2012 07:59:03 GMT 
Expires:Thu, 01 Jan 1970 00:00:00 GMT, Thu, 01 Jan 1970 00:00:00 GMT 
Keep-Alive:timeout=15, max=100 
Pragma:no-cache 
Server:Jetty(7.5.4.v20111024) 
Set-Cookie:JSESSIONID=cookieValue;Path=/;Domain=.mydomain.com 
Transfer-Encoding:chunked 
+2

对此的任何更新。你是如何解决这个问题的 – 2014-04-16 08:22:29

回答

2

按照standards spec正确的语法是:

的Set-Cookie报头= “设置Cookie:” SP set-cookie-string
set-cookie-string = cookie-pair *(“;”SP cookie-av)
cookie的对= cookie的名字“=” cookie的值
...

因此,似乎有什么你缺少的是每一个分号后空格字符。