使用NSHTTPCookieStorage访问会话cookie

时间:2010-07-16 05:23:02

标签: iphone cookies jsessionid nshttpcookie

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

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

它不会返回名为JSESSIONID的会话并导致问题。如果我NSLog完整的NSHTTPCookieStorage它显示会话,所以他们在那里,我只是找不到从存储中检索它们的方法。此外,我已经浏览了cookie plist并且会话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:[]>

现在,当我根据上述cookie中的URL要求提供cookie时,首先返回一个,第二个不返回。

*请注意不得不删除某些项目,它们符合预期,与问题无关

3 个答案:

答案 0 :(得分:2)

我遇到了这个问题,原因是因为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>

答案 1 :(得分:0)

请分解你的问题,先检查是否

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

返回您认为应返回的内容。如果没有,请仔细查看theCookie

的值

答案 2 :(得分:0)

您传递给-cookiesForURL:的实际网址是什么?如果URL没有与您的JSESSIONID cookie条目中指定的路径匹配的路径(例如http://example.com/path),则-cookiesForURL:方法将不会返回该路径。