Iphone 使用NSHTTPookie存储访问会话cookie

Iphone 使用NSHTTPookie存储访问会话cookie,iphone,cookies,jsessionid,nshttpcookie,Iphone,Cookies,Jsessionid,Nshttpcookie,我正在访问服务器的安全信息,它会根据请求向应用程序发送一堆cookie。问题是一些cookie仅用于会话,当我使用时: [NSHTTPCookie requestHeaderFieldsWithCookies:[[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:[NSURL URLWithString:theCookie]] 它不会返回名为JSESSIONID的会话,并导致问题。如果我记录完整的NSHTTPCookie存储,

我正在访问服务器的安全信息,它会根据请求向应用程序发送一堆cookie。问题是一些cookie仅用于会话,当我使用时:

[NSHTTPCookie requestHeaderFieldsWithCookies:[[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:[NSURL URLWithString:theCookie]]
它不会返回名为JSESSIONID的会话,并导致问题。如果我记录完整的NSHTTPCookie存储,它会显示会话,因此它们就在那里,我就是找不到从存储中检索它们的方法。此外,我还查看了cookie列表,其中没有存储会话cookie,但我认为这只是因为它们是基于会话的

感谢您的帮助

编辑:这是我请求所有cookie时得到的一个片段:

<NSHTTPCookie version:0 name:@\"TheNameOfTheCookie\" value:@\"A variable number\" expiresDate:@\"(null)\" created:@\"301196844.000000\" sessionOnly:TRUE domain:@\"THE URL\" path:@\"/\" secure:FALSE comment:@\"(null)\" commentURL:@\"(null)\" portList:[]>

<NSHTTPCookie version:0 name:@\"JSESSIONID\" value:@\"A variable number\" expiresDate:@\"(null)\" created:@\"301196866.000000\" sessionOnly:TRUE domain:@\"The Same URL as above\" path:@\"/path\" secure:FALSE comment:@\"(null)\" commentURL:@\"(null)\" portList:[]>

现在,当我根据上面cookies中的URL请求cookies时,第一个得到返回,第二个没有


*请注意,很抱歉必须删除某些项目,它们与预期的一样,与问题无关

请将您的问题分成几部分,首先检查是否

[[NSHTTPCookieStorage sharedHTTPCookieStorage]
    cookiesForURL:[NSURL URLWithString:theCookie]]

返回您认为应该返回的内容。如果没有,请仔细查看一下Cookie的值,您要传递给
-cookiesForURL:
的实际URL是什么?如果URL没有与JSESSIONID cookie条目中指定的路径匹配的路径(例如,
http://example.com/path
),
-cookiesForURL:
方法不会返回它。

我遇到了这个问题,原因是NSHTTPCookieDomain。 Cookie必须具有相同的域

.... domain:@\"THE URL\" path:@\"/\" ....
.... domain:@\"The Same URL as above\" path:@\"/path\" ....
一定是

.... domain:@\"NAME-DOMAIN" path:@"/" ....
我只是改变了它,把相同的域和路径放在一起

我的JSESSIONID:

<NSHTTPCookie version:0 name:"JSESSIONID" value:"7C9B0...........EB5" expiresDate:(null) created:2012-07-06 16:14:26 +0000 (3.63284e+08) sessionOnly:TRUE domain:"FOO" path:"/" isSecure:FALSE>


我已经测试了通过网络浏览器获得的信息,并将其与通过iPhone应用程序获得的信息进行了对比,以及除了JSESSIONID之外的预期信息。我使用NSURLConnection从几个不同的网站检索内容。我检查的每一个都没有得到任何JSESSIONID,而我是通过网络浏览器得到的。这有点模糊,你能提供一个代码片段和一个跟踪来显示你所看到的吗?例如,完整的cookiejar和过滤后的cookiesForUrl,包括URL。因此,我们都可以看到奇怪之处,并可能解释或至少复制它。更新后,无法进一步弄清楚。也许JSESSIONID是HTTPOnly,因此不会返回。如果没有实际的url或派生值(对于我来说,
tr/a-z/z-a/
them…),我们只能猜测:这可能是一个案例问题吗?有些Web服务器不区分大小写,而世界其他地方则不区分大小写。您能提供一个显示该行为的自包含示例吗?这不是服务器问题,因为实际的Cookie没有从存储中返回,我认为可能是命名问题,因为有多个JSESSIONID条目。我甚至手动输入了一个具有类似细节但不同url的cookie,但也无法检索它。但是有相同的名字,JSESSIONID。