2010-12-09 32 views
1

我们有一个从另一个服务器获取数据的网页。该页面“本地”加载(即从文件系统,这个网络应用程序将被放置在一个phonegap应用程序,所以我们通过从file:// url加载它模拟到firefox/chrome),并使用jquery和ajax从服务器检索数据。 服务器似乎配置为遵守CORS标准(http://www.w3.org/TR/cors/),即我们设置了诸如Access-Control-Allow-Origin,Access-Control-Allow-Credentials和Access-Control - 最大年龄)但不过,似乎服务器设置的会话cookie从不读取,也不传回服务器。 如果我们在服务器上创建“手动”会话(即在地址栏上发出请求以便服务器在客户端上设置cookie),然后打开上述页面,则该cookie永远不会传回给服务器在Ajax请求中。跨站点服务器上的jQuery/Ajax请求不使用该服务器上设置的(auth)cookie

任何暗示什么可能是错误的?

+0

如果你的页面在`file:// ...`,那么什么是“原始域”?你为`Access-Control-Allow-Origin`发送了什么值? – Lee 2010-12-09 23:24:32

回答

1

你在测试什么浏览器? IE和Safari有特别的规则,可以允许他们设置cookie,尤其是当它们是从本地页面主机制作的。您是否在某个不是本地文件系统的域上测试过此页面?

对于IE,您需要配置服务器的P3P标头。对于Safari,您必须先浏览服务器的网址,然后才允许任何来自不同网域页面的请求来设置Cookie。

+0

+1对于提及P3P标题,很少有人似乎常规地生成这些标题。 – Orbling 2010-12-10 02:46:47

0

你想从框架或IFrame设置cookie吗?

您的问题可能与第三方Cookie政策有关。 我发现,在大多数情况下,在网络服务器设置以下P3P报头帮助:

P3P:CP = NOI NID NOR

该解决方案将不会在Safari上工作,但在IE火狐&正常工作。 由于你的应用程序的目标是iPhone,它可能无法解决你的问题。