【问题标题】:Create a cookie for NSURLRequest?为 NSURLRequest 创建一个 cookie?
【发布时间】:2009-03-27 23:01:25
【问题描述】:

我正在尝试通过 NSMutableURLRequest 中的 cookie 发送身份验证字符串。我正在尝试通过

创建 NSHTTPCookie
 +(id)cookieWithProperties:(NSDictionary *)properties

但除了用于身份验证的简单键值对之外,我无法找到如何指定属性。当我只使用我的键值对时,返回 nil。

我们将不胜感激任何关于此的示例、文档或想法。

【问题讨论】:

标签: iphone cocoa cocoa-touch


【解决方案1】:

我注意到,在我的 2.2.1 iphone 上,如果未指定 NSHTTPCookiePath,则不会创建 cookie,即使它在文档中显示为“可选”:

所以,我愿意:

NSDictionary *properties = [NSDictionary dictionaryWithObjectsAndKeys:
                            @"domain.com", NSHTTPCookieDomain,
                            @"/", NSHTTPCookiePath,  // IMPORTANT!
                            @"testCookies", NSHTTPCookieName,
                            @"1", NSHTTPCookieValue,
                            nil];
NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:properties];

NSArray* cookies = [NSArray arrayWithObjects: cookie, nil];

NSDictionary * headers = [NSHTTPCookie requestHeaderFieldsWithCookies:cookies];

[request setAllHTTPHeaderFields:headers];

【讨论】:

    【解决方案2】:

    这是您在 cookie 中设置属性的方式:

     NSDictionary *properties = [NSDictionary dictionaryWithObjectsAndKeys:
                                  url, NSHTTPCookieOriginURL,
                                  @"testCookies", NSHTTPCookieName,
                                  @"1", NSHTTPCookieValue,
                                  nil];
      NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:properties];
    

    在上面的例子中: urltestCookies1。同样,NSHTTPCookieOriginURLNSHTTPCookieNameNSHTTPCookieValueNSDictionary 对象的在键值对中

    您使用NSDictionary 设置/获取属性并添加到NSHTTPCookie

    【讨论】:

    • 实际上我无法让它工作,只有使用 NSHTTPCookieDomain 和 NSHTTPCookiePath。请参阅 jm 的答案。另外:lists.apple.com/archives/Webkitsdk-dev/2003/Sep/msg00003.html
    • 我能够使用 NSHTTPCookieOriginURL,只要我指定了 NSHTTPCookiePath(感谢 jm 下面的提示)。请注意,您可以在 url 上使用 path 方法来提供值(即 [url path])。
    【解决方案3】:

    我无法让它工作。

    但是我得到了这个工作:

    NSMutableURLRequest* ret = [NSMutableURLRequest requestWithURL:myURL];
    [ret setValue:@"myCookie=foobar" forHTTPHeaderField:@"Cookie"];

    【讨论】:

      【解决方案4】:

      我在 jm 的例子中发现了一个错误:NSHTTPCookiePath 应该是@"/",而不是@"\\\\"

      NSDictionary *properties = [NSDictionary dictionaryWithObjectsAndKeys:
                                  @"domain.com", NSHTTPCookieDomain,
                                  @"/", NSHTTPCookiePath,  // IMPORTANT!
                                  @"testCookies", NSHTTPCookieName,
                                  @"1", NSHTTPCookieValue,
                                  nil];
      NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:properties];
      
      NSArray* cookies = [NSArray arrayWithObjects: cookie, nil];
      
      NSDictionary * headers = [NSHTTPCookie requestHeaderFieldsWithCookies:cookies];
      
      [request setAllHTTPHeaderFields:headers];
      

      【讨论】:

      • 我更新了我的答案。看起来很合理,虽然我没有 iPhone 可以测试了。
      【解决方案5】:

      keyNSHTTPCookiePath在使用时应该存在于字典中

      [NSHTTPCookie cookieWithProperties:dictionary]
      

      使用NSHTTPCookieDomainNSHTTPCookieOriginURL 的方法。 NSHTTPCookiePath 的值应该是 @"/" 而不是 @"\\"

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-14
        • 1970-01-01
        • 2013-08-19
        • 2021-10-16
        • 2017-08-20
        • 1970-01-01
        • 1970-01-01
        • 2018-10-14
        相关资源
        最近更新 更多