2015-05-29 27 views
7

Swift'de bir çift çerez yazmaya çalışıyorum, böylece bir web görüntülemesi görüntülediğimde, bu çerezleri okuyabilecek ve uygun şekilde tepki verebilecektir. Çerezin nasıl oluşturulacağına ve Apple belgelerini okuyacağına dair birçok örnek buldum ancak geçerli bir NSHTTPCookie nesnesi almıyorum. Her zaman sıfırdır.Swift - NSHTTPCookie nil

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

Benim cookie değişken nil geçerli:

İşte benim kod. Hem NSHTTPCookieOriginURL hem de NSHTTPCookieDomain, NSHTTPCookieSecure ve NSHTTPCookieExpires olmadan da dahil olmak üzere özelliklerin birçok kombinasyonunu denedim. Her zaman nil.

Yanlış yaptığım herhangi bir fikri olan var mı?

cevap

9

Sorun şu ki NSHTTTPCookieDomain, NSHTTPCookieOriginURL değil, kullanmak istediğiniz olduğuna inanıyorum.

Bunu gibi özelliklerini deneyebilir misiniz: Eğer kurucusuna geçerli özelliklerini girmezseniz

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

, bir boş değer elde edecektir. Bir dize değil, NSHTTPCookieSecure için bir boole sağlamanız gerekir.

+0

Vay. Şunu denedim ki zaten denedim ama belli ki yapmadım. İşe yaradı! Cevabını kabul etmeden önce 8 dakika beklemek zorundayım. Bunu yapmak için geri döneceğim. – ShatyUT

+1

FYI, NSHTTPCookieSecure için kaynak kodu "TRUE" veya "FALSE" olması gerektiğini söylüyor: 'Çerezin yalnızca güvenli kanallar üzerinden iletilip iletilmemesi gerektiğini belirten bir dize. Dize değeri "DOĞRU" veya "YANLIŞ" olmalıdır. Varsayılan "FALSE". HERHANGİ bir değerin doğru olduğunu söyleyen başka bir yer gördüm. – ShatyUT