Swift - NSHTTPCookie为空。

13

我正在尝试使用Swift编写一些cookies,以便在显示网络视图时,它将能够读取这些cookies并做出适当的反应。我找到了许多创建cookie和阅读Apple文档的示例,但似乎无法获得有效的NSHTTPCookie对象。它总是为空。

这是我的代码:

let baseHost = "domain.com"
let oneYearInSeconds = NSTimeInterval(60 * 60 * 24 * 365)

func setCookie(key: String, value: AnyObject) {
    var cookieProps = [
        NSHTTPCookieOriginURL: baseHost,
        NSHTTPCookiePath: "/",
        NSHTTPCookieName: key,
        NSHTTPCookieValue: value,
        NSHTTPCookieSecure: "TRUE",
        NSHTTPCookieExpires: NSDate(timeIntervalSinceNow: oneYearInSeconds)
    ]

    var cookie = NSHTTPCookie(properties: cookieProps)
    // This line fails due to the nil cookie
    NSHTTPCookieStorage.sharedHTTPCookieStorage().setCookie(cookie!)
}

我的cookie变量是nil。我已经尝试了许多属性的组合,包括同时使用NSHTTPCookieOriginURLNSHTTPCookieDomain,有或没有NSHTTPCookieSecure,甚至没有NSHTTPCookieExpires也尝试过。始终是nil

有人知道我哪里做错了吗?

1个回答

20

我认为问题在于你想使用的应该是NSHTTPCookieDomain而不是NSHTTPCookieOriginURL

你可以这样尝试一下这些属性:

var cookieProps = [
        NSHTTPCookieDomain: baseHost,
        NSHTTPCookiePath: "/",
        NSHTTPCookieName: key,
        NSHTTPCookieValue: value,
        NSHTTPCookieSecure: "TRUE",
        NSHTTPCookieExpires: NSDate(timeIntervalSinceNow: oneYearInSeconds)
    ]
如果您没有向构造函数提供有效的属性,将会得到一个空值。您应该向 NSHTTPCookieSecure 提供一个布尔值,而不是一个字符串。

哇,我肯定我已经尝试过了,但显然我没有。那个方法有效!在我能接受你的答案之前,我必须等待8分钟。稍后我会回来做到这一点。 - ShatyUT
1
FYI,NSHTTPCookieSecure的源代码表明它应该是“TRUE”或“FALSE”:“一个字符串,指示cookie是否只能通过安全通道传输。字符串值必须是“TRUE”或“FALSE”。默认值为“FALSE”。”。我看到另一个位置说,任何值都意味着是真的。 - ShatyUT
1
我实际上使用了.domain,但它返回了nil,然后我将其更改为.originURL,现在它可以工作了 ‍♂️ - LinusGeffarth

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