2015-05-29 12 views
7

Sto cercando di scrivere un paio di cookie in Swift in modo tale che quando visualizzo una webview, sarà in grado di leggere quei cookie e reagire in modo appropriato. Ho trovato molti esempi su come creare il cookie e leggere i documenti Apple, ma non riesco a ottenere un oggetto NSHTTPCookie valido. È sempre zero.Swift - NSHTTPCookie è nil

Ecco il mio codice:

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!) 
} 

mio variabile cookie è nil. Ho provato molte combinazioni delle proprietà compreso avere sia NSHTTPCookieOriginURL e NSHTTPCookieDomain, con e senza NSHTTPCookieSecure e anche senza NSHTTPCookieExpires. Sempre nil.

Qualcuno ha qualche idea su cosa sto facendo male?

risposta

9

Credo che il problema è che si desidera utilizzare NSHTTTPCookieDomain, NON NSHTTPCookieOriginURL.

Potrebbe provare le proprietà in questo modo:

var cookieProps = [ 
     NSHTTPCookieDomain: baseHost, 
     NSHTTPCookiePath: "/", 
     NSHTTPCookieName: key, 
     NSHTTPCookieValue: value, 
     NSHTTPCookieSecure: "TRUE", 
     NSHTTPCookieExpires: NSDate(timeIntervalSinceNow: oneYearInSeconds) 
    ] 

Se non si forniscono le proprietà valide al costruttore, si otterrà un valore nullo. Dovresti fornire un valore booleano a NSHTTPCookieSecure, non una stringa.

+0

Wow. Ero sicuro di averlo già provato ma ovviamente non l'avevo fatto. Ha funzionato! Devo aspettare 8 minuti prima di poter accettare la tua risposta. Tornerò a farlo più tardi. – ShatyUT

+1

FYI, il codice sorgente per NSHTTPCookieSecure dice che dovrebbe essere "TRUE" o "FALSE": "Una stringa che indica se il cookie deve essere trasmesso solo su canali protetti. Il valore di stringa deve essere "TRUE" o "FALSE". L'impostazione predefinita è "FALSE". '. Ho visto un'altra posizione che diceva QUALSIASI valore implicito vero. – ShatyUT

Problemi correlati