使用NSHTTPCookieStorage访问会话cookie

3

我正在访问服务器的安全信息,并在请求时向应用程序发送一堆Cookies。问题是,其中一些Cookie仅适用于会话,当我使用以下代码时:

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

它不能返回名称为JSESSIONID的会话,从而导致问题。如果我NSLog完整的NSHTTPCookieStorage,则显示会话cookie,因此它们存在,只是我找不到一种方法将它们从存储中检索出来。此外,我查看了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 时,第一个 cookie 被返回,第二个 cookie 没有被返回。*注意:很抱歉不得不删除某些项目,它们是预期的并且与问题无关。

没有实际的url或派生值(对于我的部分tr / a-z / z-a /它们...),我们只能猜测:可能是大小写问题吗?一些Web服务器不区分大小写,而其他地方则不同。您能否提供一个自包含的示例来展示这种行为? - mvds
这并不是服务器的问题,实际的Cookie没有从存储中返回。我认为这可能是一个命名问题,因为有多个JSESSIONID条目。我甚至手动输入了一个具有类似细节但不同URL的Cookie,也无法检索它。名称相同,即JSESSIONID。 - Rudiger
3个回答

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>

0
请将您的问题分解成若干部分,首先检查是否
[[NSHTTPCookieStorage sharedHTTPCookieStorage]
    cookiesForURL:[NSURL URLWithString:theCookie]]

返回您认为应该返回的内容。如果不是,请仔细查看theCookie的值。


我已经测试了通过Web浏览器和iPhone应用程序获取的内容,并进行了比较,除了JSESSIONID外都与预期相同。我使用NSURLConnection从几个不同的网站检索内容。每个我检查的网站都没有获取任何JSESSIONID,但是在Web浏览器中可以获取到。 - Rudiger
这里有点模糊,你能提供一段代码和跟踪信息吗?例如完整的cookiejar和过滤后的cookiesForUrl,包括URL。这样我们都可以看到异常情况,并可能解释或至少重现它。 - mvds
更新了,还没有更接近解决。 - Rudiger
也许 JSESSIONID 是 HTTPOnly 的,因此没有被返回。 - StackRunner

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接