【问题标题】:Accessing session cookies with NSHTTPCookieStorage使用 NSHTTPCookieStorage 访问会话 cookie
【发布时间】:2011-03-16 18:48:52
【问题描述】:

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

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

它不会返回名称为 JSESSIONID 的会话并导致问题。如果我对完整的 NSHTTPCookieStorage 进行 NSLog 记录,它会显示会话,以便它们存在,我只是找不到从存储中检索它们的方法。另外,我查看了 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 时,第一个会返回,第二个不会。

*请注意,对于必须删除某些项目感到抱歉,它们符合预期,与问题无关

【问题讨论】:

  • 没有实际的 url 或派生值(就我而言 tr/a-z/z-a/ 他们......)我们只能猜测:这可能是一个案例问题吗?一些网络服务器不区分大小写,而世界其他地方则不然。您能否提供一个显示行为的自包含示例?
  • 这不是服务器问题,因为实际的 Cookie 没有从存储中返回,我认为这可能是命名问题,因为有多个 JSESSIONID 条目。我什至手动输入了一个具有相似详细信息但 url 不同的 cookie,也无法检索它。虽然名称相同,但 JSESSIONID。

标签: iphone cookies jsessionid nshttpcookie


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

      • 我已经测试了通过 Web 浏览器获得的内容与通过 iPhone 应用获得的内容以及除了 JSESSIONID 之外的预期内容。我使用 NSURLConnection 从几个不同的网站检索内容。我检查的每一个我都没有得到任何 JSESSIONID,而我是通过网络浏览器进行的
      • 这有点模糊,您能否提供代码 sn-p 和显示您所看到内容的跟踪?例如。完整的 cookiejar 和过滤的 cookiesForUrl,包括 URL。所以我们都可以看到奇怪之处,并且可以解释或至少重现它。
      • 更新了,还没搞清楚。
      • 也许 JSESSIONID 是 HTTPOnly,因此不会被返回。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-17
      • 2010-10-30
      • 2022-08-06
      • 1970-01-01
      • 2012-02-01
      • 1970-01-01
      • 2012-07-08
      相关资源
      最近更新 更多